我在文件中有以下模式
TREE(abc/x73/APPLE) DEST(MYFILE.FILE1A)
TREE(abc/x74/APPLE) DEST(MYFILE88.FILE1A)
TREE(abc/x100/APPLE) DEST(MYFILE100.FILE1B)
TREE(abc/x61/APPLE) DEST(MYFILE1000.FILE1A)
我希望理想的输出是:
TREE(abc/x73/APPLE) FILE1A
TREE(abc/x74/APPLE) FILE1A
TREE(abc/x100/APPLE) FILE1B
TREE(abc/x61/APPLE) FILE1A
不过,我会接受:
TREE(abc/x73/APPLE) DEST(FILE1A)
TREE(abc/x74/APPLE) DEST(FILE1A)
TREE(abc/x100/APPLE) DEST(FILE1B)
TREE(abc/x61/APPLE) DEST(FILE1A)
我试过各种变体
sed 's/\(FILE1A\).*/\1/'
但我只是不断得到与输入相同的结果。对于我哪里出错的任何指示,我将不胜感激。
谢谢。
最佳答案
这是否解决了您的问题?
cat test.txt
TREE(abc/x73/APPLE) DEST(MYFILE.FILE1A)
TREE(abc/x74/APPLE) DEST(MYFILE88.FILE1A)
TREE(abc/x100/APPLE) DEST(MYFILE100.FILE1B)
TREE(abc/x61/APPLE) DEST(MYFILE1000.FILE1A)
sed -n 's/\(.*)\).*\.\(.*\))/\1\t\2/p' test.txt
TREE(abc/x73/APPLE) FILE1A
TREE(abc/x74/APPLE) FILE1A
TREE(abc/x100/APPLE) FILE1B
TREE(abc/x61/APPLE) FILE1A
解释:
-n
选项 - 不打印所有内容
\(.*)\)
第一个捕获组 - 包括第一个“)”在内的所有内容
\.\(.*\))
第二个捕获组 - “.”之间的所有内容和最后一个“)”
\1\t\2/p
打印第一个捕获组,然后是制表符,然后是第二个捕获组
关于awk - 使用 sed/awk 从重复行中删除模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69578679/