2017-10-10 80 views
0

我已經修改了代碼,發現這裏:sed whole word search and replace如何桑達搜索替換整個單詞用字符串匹配文件

我一直在試圖用正確的語法\<\>的sed將一個文件中匹配多個方面。

echo "Here Is My Example Testing Code" | sed -e "$(sed 's:\<.*\>:s/&//ig:' file.txt)"

不過,我認爲,因爲它尋找到的文件,它不匹配完​​整的單詞(只精確匹配)留下一些拆分單詞和單個字符。

有誰知道正確的語法?

實施例:

輸入:

Here Is My Example Testing Code

FILE.TXT:

example 
test 

希望的輸出:

Here Is My Code

+1

所以你想要從Input_file中刪除File.txt中的單詞嗎?你能不能讓我知道。 – RavinderSingh13

+0

@ RavinderSingh13在這裏你去:'回聲「這是我的例子測試代碼」| sed -e「$(sed's:\ <.*\>:s /&// ig:'file.txt)」' – DomainsFeatured

+0

@ RavinderSingh13,對不起,我無法使用你的代碼工作。請嘗試堅持這個問題,以提供用我提供的sed命令調用文件的正確語法。 – DomainsFeatured

回答

0

以下awk可以幫助你。

awk 'FNR==NR{a[$0]=$0;next} {for(i=1;i<=NF;i++){for(j in a){if(tolower($i)~ a[j]){$i=""}}}} 1' file.txt input 
***OR*** 
awk ' 
FNR==NR{ 
    a[$0]=$0; 
    next 
} 
{ 
for(i=1;i<=NF;i++){ 
    for(j in a){ 
    if(tolower($i)~ a[j]){ 
    $i=""} 
}}} 
1 
' file.txt input 

輸出如下。

Here Is My Code 

此外,如果你的INPUT_FILE總是限定一個空間,你不想不必要的空間,如上面的輸出,那麼你可以使用以下。

awk 'FNR==NR{a[$0]=$0;next} {for(i=1;i<=NF;i++){for(j in a){if(tolower($i)~ a[j]){$i=""}}};gsub(/ +/," ")} 1' file.txt input 
***OR*** 
awk ' 
FNR==NR{ 
a[$0]=$0; 
next 
} 
{ 
for(i=1;i<=NF;i++){ 
for(j in a){ 
    if(tolower($i)~ a[j]){ 
    $i=""} 
}}; 
gsub(/ +/," ") 
} 
1 
' file.txt input 

輸出如下。

Here Is My Code 
2

修改您的sed命令,接着應該提取你想要什麼,

sed -e "$(sed 's:\<.*\>:s/&\\w*\\s//ig:' file.txt)" 

簡要說明,

  • \b一個字和一個非字母數字字符之間的位置相匹配。在這種情況下,file.txt中的模式'test'與'Testing'不匹配。
  • 通過這種方式,修改搜索的模式應附加\w*應該工作。 \w實際匹配[a-zA-Z0-9_]
  • 不要忘記消除每個搜索模式後面的空格,應該添加\s
相關問題