假设我在文件中有以下文字:
foo.bar.baz
bar.baz
123.foo.bar.baz
pqr.abc.def
xyz.abc.def
abc.def.ghi.jkl
def.ghi.jkl
如何根据后缀修复文件中的重复项?没有重复的预期输出将是:
bar.baz
pqr.abc.def
xyz.abc.def
def.ghi.jkl
(考虑foo.bar.baz
和bar.baz
。后者是子字符串后缀,因此只剩下bar.baz
。但pqr.abc.def
和xyz.abc.def
都不是子字符串彼此的后缀,所以两者都保留。)
答案 0 :(得分:2)
试试这个:
#!/bin/bash
INPUT_FILE="$1"
in="$(cat $INPUT_FILE)"
out="$in"
for line in $in; do
out=$(echo "$out" | grep -v "\.$line\$")
done
echo "$out"
您需要将其保存到脚本(例如bashor.sh
),使其可执行(chmod +x bashor.sh
)并使用您的输入文件作为第一个参数调用它:
./bashor.sh path/to/input.txt
答案 1 :(得分:0)
使用sed
转义正则表达式的字符串,前缀.
,后缀$
并将其传递给GNU grep(-f -
不适用于BSD grep,例如,在Mac上。)
sed 's/[^-A-Za-z0-9_]/\\&/g; s/^/./; s/$/$/' test.txt |grep -vf - test.txt
我刚刚习惯regular expression escaping from another answer,并没有想到它是否合理。乍一看似乎很好,但逃避太多,虽然这可能不是问题。