文件看起来像
$1 $2 $3
Text Text2 *
Text Text4 Text3
我想在文件中搜索*'s
,并将其替换为旁边的列中的文本。在保留其余信息的同时......基本上将*
logicaly替换为第2列。
目前我正在使用sed或awk
awk : awk '{ if($3=*) {print$2}}'
有效...但我想保留1,2美元以及
sed : sed -r 's/[*]//g'
我无法让reg表达式正确地替换为$ 2
任何快速帮助,提示或技巧?
答案 0 :(得分:2)
awk解决方案:
awk '$3=="*"{$3=$2}1' file
答案 1 :(得分:2)
file.txt
的内容:
Text Text2 *
Text Text4 Text3
使用awk
的一种方式:
awk '$3 == "*" { $3=$2 }1' file.txt
结果:
Text Text2 Text2
Text Text4 Text3
答案 2 :(得分:2)
使用GNU sed \S
和\s
可分别用于表示非空格和空格,因此您可以完成您想要的内容:
sed -r '/(\S+)\s+(\S+)\s+\*/ s//\1 \2 \2/'
空s///
命令隐式使用//
中的匹配项。
如果它在 steve 列出的输入上运行:
sed -r '/(\S+)\s+(\S+)\s+\*/ s//\1 \2 \2/' file.txt
输出:
Text Text2 Text2
Text Text4 Text3
如果要保留列间空格,请使用:
sed -r '/(\S+)(\s+)(\S+)(\s+)\*/ s//\1\2\3\4\3/'