如何替换部分标题,删除两个字符之间的bash,awk,sed

时间:2017-07-24 18:31:56

标签: bash unix awk sed

我有一个制表符分隔文件。

abc_a1.txt\tcde_b2.txt\tefgh_c11.txt\t....
1\t2\t3\t...

我想在_后为每个列标题删除任何内容。我想得到

abc\tcde\tefgh\t...
1\t2\t3\t...

我该怎么做。尝试sed –i ‘s/_.*//g’并在第一次_之后删除所有内容 谢谢你的帮助

3 个答案:

答案 0 :(得分:3)

使用gnu sed您可以使用否定括号表达式:

sed 's/_[^\t]*//g' file

_[^\t]*匹配下划线,后跟零个或多个非制表符。

答案 1 :(得分:1)

尝试使用awk:

awk '{gsub(/_[^\\]*/,"");print}'   Input_file

尝试使用sed:

sed 's/_[^\\]*//g'   Input_file

编辑:正如OP所说,\ t是输入文件中的TAB,所以现在也添加以下解决方案。

awk '{gsub(/_[^\t]*/,"");print}'  Input_file

答案 2 :(得分:0)

sed 's/_[^\t]*\t/\t/g'

如果你不担心最后一个字段。

sed 's/_[^\t]*\t/\t/g;s/_[^\t]*$//'

否则。