SED 脚本将字符串中的字符串"n"替换为换行符



我最近写了一个脚本,该脚本将解析一大堆文件并在整个过程中增加版本号。该脚本适用于除一个文件外的所有文件。它使用下面的sed命令(它是从各种谷歌搜索和非常有限的sed知识拼凑而成的(在.tex文件中找到一行并增加版本号。

sed -i -r 's/(.*)(VERSION}{0.)([0-9]+)(.*)/echo "12$((3+1))4"/ge' fileName.tex

上述问题(我不确定如何解决(是,它发现要更改的行显示为

newcommand{VERSION}{0.123}

sed命令用换行符替换上面一行中的"\n",从而输出

ewcommand{VERSION}{0.124}(前面有一个换行符(。

所需输出为:

newcommand{VERSION}{0.124}

我该怎么解决这个问题?

好吧,所以我无法从Cyrus那里得到答案,因为该文件在我的tex文件中找到了大约50行它想要修改的其他行,我不太确定如何修复awk语句以找到我想要的特定行。然而,我通过做一个简单的更改,使它与原始的sed方法一起工作。

我的sed命令是两个,第一个创建一个临时字符串%TMPSTR%,然后立即替换所述临时字符串以获得所需的输出,并避免出现任何换行符。

sed -i -r 's/(.*)(VERSION}{0.)([0-9]+)(.*)/echo "\%TMPSTR%{\2$((3+1))4"/ge' fileName.tex
sed -i -r 's/%TMPSTR%/newcommand/g' fileName.tex

所以文件中的行来自

newcommand{VERSION}{0.123}->%TMPSTR%{VERSION}{0.124}->newcommand{VERSION}{0.124}

并以期望的结果结束。我想有点丑,但它满足了我的需要!

使用awk,它不会被具有特殊字符的数据所混淆。您的问题可以通过临时替换反斜杠来解决,但我希望这个答案能引导您使用awk

对于一行:

echo 'newcommand{VERSION}{0.123},' | tr '' 'r' | 
sed -r 's/(.*)(VERSION}{0.)([0-9]+)(.*)/echo "12$((3+1))4"/ge' | tr 'r' ''

对于文件

tr '' 'r' < fileName.tex | 
sed -r 's/(.*)(VERSION}{0.)([0-9]+)(.*)/echo "12$((3+1))4"/ge' |
tr 'r' '' > fileName.tex.tmp && mv fileName.tex.tmp fileName.tex

n是唯一的问题时,您可以尝试

sed -i -r 's/\n/r/g;s/(.*)(VERSION}{0.)([0-9]+)(.*)/echo "12$((3+1))4"/ge;s/r/\n/' fileName.tex

相关内容

  • 没有找到相关文章

最新更新