我想对特定行号的一行进行搜索和替换。但是,我希望能够使用一个变量来代替行号本身。
例如,如果我想在第180行将数字4替换为数字5。我会使用以下代码。
我的问题是如何使用变量来表示行号?
例如,如果我想在第180行将数字4替换为数字5。我会使用以下代码。
sed '180 s/4/5/' file
我的问题是如何使用变量来表示行号?
sed '$variable s/4/5/' file
sed
程序中使用双引号以引用shell变量(因为单引号字符串不会被shell解释(扩展))。sed
程序是一个独立的世界 - 它们没有变量概念,因此使用变量的唯一方法是使用由shell求值的包含对shell变量的引用的双引号字符串。\
-转义要让shell忽略并传递给sed
查看的字符,特别是将$
作为\$
。sed "$variable s/4/5/" file
补充说明:
作为替代方案,你的sed
程序的核心可以保持单引号,只需要将shell变量引用作为双引号字符串拼接在其中;请注意,在字符串组成部分之间不能有空格,因为整个表达式必须计算为单一字符串:
sed "$variable"' s/4/5/' file
在这种情况下,你可以不使用变量引用周围的双引号,但通常最好使用它们,以避免意外的shell扩展(例如单词拆分)可能会改变或甚至破坏命令。
sed $variable's/4/5/' file
你可以使用 awk
来完成它。
awk 'NR==l {sub(/4/,"5")}1' l="$variable" file
sed "$variable s/4/5/" file
。 - gniourf_gniourf