我的数据结构如下,分为两列:
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
在不更改_10
or 的情况下替换为空_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