awk或sed将特定$3替换为ajacent$2
文件看起来像awk或sed将特定$3替换为ajacent$2,sed,awk,Sed,Awk,文件看起来像 $1 $2 $3 Text Text2 * Text Text4 Text3 我想在一个文件中搜索*,并用它旁边的列中的文本替换。在保留其余信息的同时。。。基本上,将*逻辑替换为第2列 目前我正在与sed或awk合作 awk:awk'{if($3=*){print$2}}'works。。。但我也想保留1,2美元 sed:sed-r的//[*]//g'我无法将reg表达式正确地替换为$2 任何快速帮助、提示或技巧?awk解决方案: awk '$3
$1 $2 $3
Text Text2 *
Text Text4 Text3
我想在一个文件中搜索*
,并用它旁边的列中的文本替换。在保留其余信息的同时。。。基本上,将*
逻辑替换为第2列
目前我正在与sed或awk合作
awk:awk'{if($3=*){print$2}}'
works。。。但我也想保留1,2美元
sed:sed-r的//[*]//g'
我无法将reg表达式正确地替换为$2
任何快速帮助、提示或技巧?awk解决方案:
awk '$3=="*"{$3=$2}1' file
file.txt的内容
:
Text Text2 *
Text Text4 Text3
单向使用awk
:
awk '$3 == "*" { $3=$2 }1' file.txt
结果:
Text Text2 Text2
Text Text4 Text3
使用GNU,可以使用
\S
和\S
分别表示非空间和空间,因此您可以像这样完成您想要的:
sed -r '/(\S+)\s+(\S+)\s+\*/ s//\1 \2 \2/'
空的s//
命令隐式使用//
中的匹配项
如果在steve列出的输入上运行:
输出:
Text Text2 Text2
文本文本4文本3
如果要保留列间空白,请使用:
sed -r '/(\S+)(\s+)(\S+)(\s+)\*/ s//\1\2\3\4\3/'
你的两个答案都帮助我写了一个awk'{if($3==“*”){$3=$2}{print$0}}}>file.txt。你们中有谁能解释一下你的“1”,它允许打印我从未见过的行。在
awk
中,括号后的1
只是print$0
的简写,我知道基本知识,而且似乎写得有点冗长。好把戏谢谢你我喜欢命令行,并将继续使用它
sed -r '/(\S+)(\s+)(\S+)(\s+)\*/ s//\1\2\3\4\3/'