替换文件中的动态行

时间:2014-11-03 14:43:54

标签: linux sed

我正在尝试替换文件中可能因不同计算机而异的行。例如,该行可能类似于以下示例:

testLine=14
testLine=320
testLine=abc

每次尝试使用sed替换线时,知道线条不一样,但最后会附加额外的线条。我将使用的命令是:

sed -i 's/testLine=*/testLine=test/g' fileName

此命令将导致上述示例变为:

testLine=test14
testLine=test320
testLine=testabc

我希望这些行仅等于testLine=test并删除等号右侧存在的行。我需要添加哪些参数才能产生我想要的结果?

2 个答案:

答案 0 :(得分:1)

您忘记在.

之前添加*
sed -i 's/testLine=.*/testLine=test/' fileName

OR

sed -i 's/^testLine=.*/testLine=test/' fileName

您的正则表达式testLine=*与字符串testLine以及以下=匹配零次或多次。所以它到达=符号时就会停止。但是testLine=.*会匹配字符串testLine加上以下零个或多个字符。在您的情况下,上述正则表达式将用testLine=test

替换整行

答案 1 :(得分:0)

使用awk

awk -F "=" '{if($1 == "testLine") printf("%s=test%s\n",$1,$2)}' file.txt > file.txt

outupt:

testLine=test14
testLine=test320
testLine=testabc

我使用-F“=”作为输入fiels,所以$ 1将在“=”之前,而$ 2在“=”之后,我使用printf来产生所需的输出