sed _1 但不是 _10 _11 等

sed _1 但不是 _10 _11 等

我的数据结构如下,分为两列:

ABC_1 ABC_1
XYZ_1 XYZ_1
ABC_10 ABC_10
XYZ_11 XYZ_11

我尝试过sed /s/_1//g file_name,但它也改变_10_11

如何_1在不更改_10or 的情况下替换为空_11

答案1

更改正则表达式!匹配你所需要的,添加一些锚点来限制选择。

您没有说从哪里读取数据。它是文件列表吗?作为由set -- *? 设置的位置参数。一个数组?一个文件,每个名称各占一行。一根绳子?

假设一个文件有两列,以空格分隔,并且还假设您想要更改包含 a 的每个单词(_1如果它位于该单词的末尾)或者在线的末尾。然后使用_1([ ]|$).这意味着:_1如果后跟一个空格或在行尾则匹配。

$ cat infile

ABC_1 ABC_1
XYZ_1 XYZ_1
ABC_10 ABC_10
XYZ_11 XYZ_11


$ sed -E 's/_1([ ]|$)/\1/g' infile        # non-POSIX sed because of `-E`.
ABC ABC
XYZ XYZ
ABC_10 ABC_10
XYZ_11 XYZ_11

相关内容