sed命令中的变量

时间:2018-11-01 19:15:01

标签: sed

我无法使此sed命令正常工作。

sed: -e expression #1, char 31: unterminated address regex

如果我将双引号替换为双引号,则会破坏命令的其余部分,并且会出现此错误:

OrderA
-------
userId
orderDate
amount

OrderB
------
userId
orderDate

sample data:

OrderA
1  01/01/2018 100
1  02/01/2018 101
1  03/01/2018 102

OrderB
1  01/01/2018 
1  01/10/2018 
1  03/01/2018

基本上我正在做的是使用tac向后搜索文件,以便我可以找到以反斜杠开头的前一行并将其分配给变量remote_file_path。

谢谢

1 个答案:

答案 0 :(得分:0)

单引号不会扩展变量。双引号可以,但是如果文件名包含斜杠(或sed的其他一些特殊字符),则它可能会破坏表达式。您可以使用其他正则表达式定界符(例如\=$file_name= d),但前提是您确定文件名永远不能包含它(或其他特殊的sed字符,例如点)。

使用带有变量的真实语言,shell中的变量只是宏;例如,您可以使用Perl:

f=$file_name perl -ne 'next if 1 .. /\Q$ENV{f}/; print, last if /^\\/'
  • \Q用$ f文字使所有特殊字符(请参阅quotemeta)。