我有一個檔案suffix.txt,其中包含一些字串的行數,例如-
ing
ness
es
編碼
術語
另外,我有一個文本檔案text.txt,其中包含一些文本。
給定text.txt只由小寫字母組成,沒有任何標點符號,例如-
雨云回答了男人的所有問題,并以所有的
疑問的心態下,公主回答了
駕馭一切美好而不被激怒
我想從text.txt中的原詞中洗掉后綴,對每個后綴只洗掉一次。因此,我期望有以下的輸出-
雨云回答了男人的所有interroga和與所有
疑問的心態下,公主回應
在沒有得到刺激的情況下,一切都很好
注意,tion沒有從questioned中洗掉,因為原詞不包含tion作為后綴。如果有人能用sed命令來回答這個問題,那將非常有幫助。
我正在使用一個天真的腳本,但它似乎并沒有完成這項作業-
while read p; do
sed -i "s/$p / /g" text.txt。
sed -i "s/$p$//g" text.txt。
done <supix.txt
uj5u.com熱心網友回復:
一個awk:
$ awk '
NR==FNR { # 生成一個足夠的重合詞
s=s (s==""? "(":"|") $0 # (ing|ness|es|ed|tion)$
接下來
}
FNR==1 {
s=s ")$" # 好吧,上面的)$被插入這里
}
{
for(i=1;i<=NF;i ) # 遍歷所有的詞,并且
sub(s,"",$i) # 對每一個詞都應用了重合詞
}1'后綴文本# output
輸出:
雨云回答了男人的所有interroga和與所有
疑問的心態下,公主回應
在沒有得到刺激的情況下,一切都很好
uj5u.com熱心網友回復:
Kinda hairy,但只有sed和unix工具:
。sed -E -f <(tr '
' '|' <后綴。 txt | sed 's/|$//; s/|/|/g; s/$//' | xargs printf 's/%s//g') text.txt
該
tr '
' '|' <后綴。 txt | sed 's/|$//; s/|/|/g; s/$//' | xargs printf 's/%s/g'
生成的替換腳本為
s/ing|ness|es|ed|tion/g
這需要GNU sed的。
用perl、ruby、awk等會更容易
。這里有一個GNU awk:
gawk -i join 'FNR==NR {arr[FNR]=$1; next}.
FNR==1{re=join(arr,1,length(arr),">|"); re=re ">"}。
{gsub(re,"")}
1
' suffix.txt text.txt
兩者都產生:
雨云回答了男人的所有interroga,并以所有的
疑問的心態下,公主回應
在沒有得到刺激的情況下,一切都很好
uj5u.com熱心網友回復:
這可能對你有用 (GNU sed):
sed -z 'y/
/|/;s/|$/;s#.*#s/B(&)//g#' suffixFile | sed -Ef - textFile
將 suffixFile 轉換為檔案中的 sed 命令,并通過管道將其傳遞給第二次呼叫 sed 來修改 textFile 的命令。
注意:sed命令使用B和來匹配后綴。
uj5u.com熱心網友回復:
你可以嘗試這種sed方法。
你首先需要從suffix.txt
suffix=($(cat suffix.txt) )
然后你可以在主sed代碼中使用它進行替換。
sed " s/${suffix[0]}/;s/${suffix[1]}/g;/question/! {s/${suffix[2]//}; s/${suffix[3]}/g;/question/! {s/${suffix[4]}/}" text.txt
輸出
雨云回答男人的所有問題,并以所有的
疑問的心態下,公主回應
在沒有得到刺激的情況下,一切都很好
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/324759.html
標籤:
上一篇:過濾日期,其中日期是上一季度的
下一篇:Bash檢查訂單上不匹配的字串
