我将举一个例子来解释我的问题。
VARIABLE='some string'
Run Code Online (Sandbox Code Playgroud)
我想搜索文件中的字符串,例如:
sed -n "/$VARIABLE,test/p" aFile
Run Code Online (Sandbox Code Playgroud)
我知道这是错误的,因为变量标识符“$”与perl模式$冲突,这意味着行尾。
所以我的问题是:有没有办法在 sed patter 搜索中使用变量?
看起来您正在尝试使用sed范围符号,即/start/,/end/?。那是对的吗?
如果是这样,您需要做的就是添加缺少的附加“/”字符,即
sed -n "/$VARIABLE/,/test/p" aFile
Run Code Online (Sandbox Code Playgroud)
范围可以由行号、字符串/正则表达式和/或相对行号(没有负面回顾)组成。
sed -n "1,20p" aFile
# prints lines 1-20
sed -n '/start/,/end/p' aFile
# prints any text (include current line)
# with start until it finds the word end
sed -n '/start/,+2p' aFile
# prints line matching start and 2 more lines after it
Run Code Online (Sandbox Code Playgroud)
我在模式中使用字符串/regex/来简化解释。/^[A-Za-z_][A-Za-z0-9_]*/ 当你了解它们时,你可以做真正的霸王龙之类的事情。
另外,根据您对“$”的评论,如果该字符在正在评估的正则表达式中可见,则 sed 还将使用“$”作为“行尾”的指示符。另请注意我的一些示例如何使用双引号或单引号。单引号意味着您的表达式sed -n '/$VARIABLE/,/test/p' aFile将与文字字符匹配,并且因为 $ 不在正则表达式的末尾,所以它将用作常规字符。'$' 仅当位于正则表达式(部分)末尾时才用作行尾;例如你可以这样做/start$|start2$/,这两者都表示行尾。
正如其他人指出的那样,您的使用
sed -n "/$VARIABLE/,/test/p" aFile
Run Code Online (Sandbox Code Playgroud)
正在通过 shell 变量解释转换为
sed -n "/some text/,/test/p" aFile
Run Code Online (Sandbox Code Playgroud)
所以如果你想确保你的文本锚定在行尾,你可以写
sed -n "/$VARIABLE$/,/test/p" aFile
Run Code Online (Sandbox Code Playgroud)
扩展到
sed -n "/some text$/,/test/p" aFile
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助
| 归档时间: |
|
| 查看次数: |
13958 次 |
| 最近记录: |