在linux中查找字符串并替换行
我想做以下几件事,但我似乎找不到一个优雅的方法来做 我有一个如下所示的文本文件:在linux中查找字符串并替换行,linux,replace,sed,find,Linux,Replace,Sed,Find,我想做以下几件事,但我似乎找不到一个优雅的方法来做 我有一个如下所示的文本文件: ..more values stuff = 23 volume = -15 autostart = 12 more values.. 现在,“体积”值可能会根据情况发生变化。我需要一个脚本,可以找到带有“volume=xxx”的文本行,然后将其替换为“volume=0”行。什么是一个优雅的解决方案?文本中的这一行不能保证是第一行,因此我需要一种先找到它的方法。使用sed,您可以说: sed '/^volum
..more values
stuff = 23
volume = -15
autostart = 12
more values..
现在,“体积”值可能会根据情况发生变化。我需要一个脚本,可以找到带有“volume=xxx”的文本行,然后将其替换为“volume=0”行。什么是一个优雅的解决方案?文本中的这一行不能保证是第一行,因此我需要一种先找到它的方法。使用sed,您可以说:
sed '/^volume/s/.*/volume = 0/' infile
将内容导入此命令:
sed -e 's/^volume\s*=\s*-\?[0-9]\+$/volume = 0/'
@jliu83,阅读正则表达式。这将使sed命令中的模式匹配更容易理解
sed的/^volume=\(.*\$/volume=1/g”inputfile
当我写下答案并在shell中测试时,另外三个已经出来了。我快生锈了@zladuric我们只是没有测试他们:-\n你能解释一下吗?通常在分隔符之前使用“s”选项进行替换。第一个/regex/
决定以下命令应用于哪一行,在这种情况下,任何以卷开始的行都可以。感谢您的回答,我需要将其重新导入文件中。正确吗?@jliu83不要直接导入文件。您可以通过管道将其传输到一个新文件,然后可以使用mv
将原始文件替换为新文件。谢谢,我想问一下,为什么不通过管道传输到同一个文件?我猜是关于读写同一个文件的某种竞争条件?@jliu83类似的东西。还请注意,sed
具有用于“就地”修改文件的-i
选项,但它实际上也创建了一个临时文件。为了安全起见,我从我显示的命令开始,如果您对输出满意,可以添加-I
选项。另外,您可以解释*
的用法吗?我在这里理解它意味着任何以体积开始的东西,但为什么不仅仅是*
,为什么有一个句点(即为什么*
不是*
)?这不是问题的答案
sed -e 's/^volume\s*=\s*-\?[0-9]\+$/volume = 0/'