我有一个文本文件,其布局为:
tableName1|counterVariable1
tableName2|counterVariable2
我想将counterVariable1替换为其他变量,例如counterVariableNew。
我该如何做到这一点?
我尝试过各种SED / AWK方法,下面提到最接近的方法:
cat $fileName | grep -w $tableName | sed -i 's/$tableName\|counterVariable/$tableName\|counterVariableNew'
但是所有3个命令都没有正确合并,请帮忙!
答案 0 :(得分:2)
您的脚本是[ useless use of cat ]的示例。但这里的关键点是当与awk FS
一起使用时,逃避具有特殊含义的管道定界符(它代表OR)。所以下面的脚本应该
# cat 42000479
tableName1|counterVariable1
tableName2|counterVariable2
tableName3|counterVariable2
# awk -F\| '$1=="tableName2"{$2="counterVariableNew"}1' 42000479
tableName1|counterVariable1
tableName2 counterVariableNew
tableName3|counterVariable2
执行相同操作的另一种方法是
# awk -v FS='|' '$1=="tableName2"{$2="counterVariableNew"}1' 42000479
单引号内的东西不会被扩展。
答案 1 :(得分:1)
awk -F'|' -v OFS='|' '/tableName1/ {$2="counterVariableNew"}1' file
tableName1|counterVariableNew
tableName2|counterVariable2
这将搜索A (tableName1)
并将B (counterVariable1)
替换为counterVariableNew
。
或者使用sed
:
sed -r '/tableName1/ s/(^.*\|)(.*)/\1counterVariableNew/g' file
tableName1|counterVariableNew
tableName2|counterVariable2
对于单词有界搜索:将模式包含在\<
和\>
中。
sed -r '/\<tableName1\>/ s/(^.*\|)(.*)/\1counterVariableNew/g' file
awk -F'|' -v OFS='|' '/\<tableName1\>/ {$2="counterVariableNew"}1' file