Unix 从文件中搜索并删除变量(包含斜杠)

Unix 从文件中搜索并删除变量(包含斜杠)

我需要搜索变量“nt”(包含斜杠)。从文件 text1 中删除包含它的所有行

$ echo $nt
/u01/app/us1fa01_0/

$ cat text1
/u01/app/fa01/
/u01/app/us1fa01_0/
/u01/app/us1fa01_ps6/

预期产出-

$ cat text1
/u01/app/fa01/
/u01/app/us1fa01_ps6/

我尝试了以下命令:

  1. sed "/$nt/d" text1

    sed: -e expression #1, char 3: unknown command: `u'
    
  2. sed "|$nt|d" text1

    sed: -e expression #1, char 1: unknown command: `|'
    
  3. sed '\|"$nt"|d' text1

    /u01/app/fa01/
    /u01/app/us1fa01_0/
    /u01/app/us1fa01_ps6/
    

上述代码似乎都不起作用。寻找出路

答案1

grep

grep -Fv -f <(echo "$nt") text1
  • -F- 将模式解释为固定字符串列表

  • -v- 反转匹配的意义,以选择不匹配的行

  • -f- 从文件中获取模式,每行一个

输出:

/u01/app/fa01/
/u01/app/us1fa01_ps6/

答案2

使用 GNU sed(不确定其他 sed 实现),您可以使用\%pattern%, 其中%是任意字符。

所以以下应该有效:

sed "\%$nt%d" text1

答案3

$ sed "\#$nt#d" text1 
/u01/app/fa01/
/u01/app/us1fa01_ps6/

sed如果您用 引用它,则允许您使用任意模式分隔符\

这会失败如果$nt包含任何#字符。在这种情况下,请使用另一个分隔符。

请注意,这将删除该行中任何位置包含该模式的行。

要强制模式匹配整行,请使用

$ sed "\#^$nt\$#d" text1

$在这里,我们需要用引用 shell 中的行尾锚点\$

相关内容