我修改了此处的代码:sed whole word search and replace
我一直在尝试使用正确的语法\<
和\>
来匹配文件中的多个术语。
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
答案 0 :(得分:2)
修改您的sed
命令,如下所示,应该提取您想要的内容,
sed -e "$(sed 's:\<.*\>:s/&\\w*\\s//ig:' file.txt)"
简要说明,
\b
匹配单词和非字母数字字符之间的位置。在这种情况下,模式&#39;测试&#39;在file.txt中不匹配&#39;测试&#39;。 \w*
的搜索模式应该有效。 \w
实际上与[a-zA-Z0-9_]
\s
。答案 1 :(得分: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