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/'