我有一个很长的TSV文件,如下所示:
name1_otherinfo field2
namess2_otherinfo field2
names3_otherinfo field2
etc...
我试图通过简单地删除字母" otherinfo",并在开头添加单词NEW 来尝试清理第一个字段,这样我就可以这样:
NEW_name1 field2
NEW_namess2 field2
NEW_names3 field2
etc...
我发现sed非常压倒性,而且我不确定在哪里寻找特定的解决方案。而且我不确定如何使用awk隔离特定的减法子串。 " _otherinfo"部分是相同的,但名称可能会发生变化,因此substr似乎没有针对我想要的目标。我该怎么做?
答案 0 :(得分:1)
您可以使用sed执行此操作,例如这适用于GNU sed和您的示例数据:
sed -r 's/^([^\t]+)_otherinfo/NEW_\1/' file
它捕获任何
^
)[^\t]+
)_otherinfo
进入\1
,_otherinfo
未被捕获,因此在替换中被丢弃。替换使用\1
并在NEW_
之前添加。只有_otherinfo
的行会受到影响。
答案 1 :(得分:1)
使用awk:
awk 'BEGIN{FS=OFS="\t"} sub(/_otherinfo$/, "", $1) {$1 = "NEW_" $1} 1' file
NEW_name1 field2
NEW_namess2 field2
NEW_names3 field2
<强>解体:强>
BEGIN{FS=OFS="\t"} # set input & output field separator as tab
sub(/_otherinfo$/, "", $1) # remove "_otherinfo" from end of first column
{$1 = "NEW_" $1} # if sub is success then prefix 1st col with "NEW_"
1 # default awk action to print each line
答案 2 :(得分:1)
awk中:
docker tag deploy foo/rtb