【问题标题】:How To Sed Search Replace Entire Word With String Match In File如何 Sed 搜索用文件中的字符串匹配替换整个单词
【发布时间】:2017-10-10 21:56:08
【问题描述】:

我已经修改了这里找到的代码: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

文件.txt:

example
test

期望的输出:

Here Is My Code

【问题讨论】:

  • 所以您想从 Input_file 中删除 File.txt 中的那些单词?你能不能让我知道。
  • @RavinderSingh13 给你:echo "Here Is My Example Testing Code" | sed -e "$(sed 's:\<.*\>:s/&//ig:' file.txt)"
  • @RavinderSingh13,抱歉,我无法使用您的代码。请尝试坚持使用我提供的 sed 命令调用文件的正确语法。
  • 如果您对我的回答投了反对票,请告诉我吗?如果是,那么请让我知道原因(恕我直言,原因不应该是我的代码不起作用,因为这是根据您的规范编写的),人们有权知道原因。
  • 是的。我没有让你的代码工作。而且它不是按照我的规范写的。我特别要求 SED。而且,在我刚刚回答之后,你又问了我这个问题,这很健谈。你对这个问题投了反对票吗?

标签: linux bash unix awk sed


【解决方案1】:

修改你的sed命令如下应该提取你想要的,

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

简要说明,

  • \b 匹配单词和非字母数字字符之间的位置。在这种情况下,file.txt 中的模式“test”将与“Testing”不匹配。
  • 这样,修改搜索到的模式加上\w*应该可以工作。 \w 实际匹配 [a-zA-Z0-9_]
  • 不要忘记消除每个搜索模式后面的空格,应该添加\s

【讨论】:

    【解决方案2】:

    遵循 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
    

    【讨论】:

      猜你喜欢
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 2017-03-20
      • 1970-01-01
      相关资源
      最近更新 更多