我正在尝试替换文件中可能因不同计算机而异的行。例如,该行可能类似于以下示例:
testLine=14
testLine=320
testLine=abc
每次尝试使用sed
替换线时,知道线条不一样,但最后会附加额外的线条。我将使用的命令是:
sed -i 's/testLine=*/testLine=test/g' fileName
此命令将导致上述示例变为:
testLine=test14
testLine=test320
testLine=testabc
我希望这些行仅等于testLine=test
并删除等号右侧存在的行。我需要添加哪些参数才能产生我想要的结果?
答案 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来产生所需的输出