我有一个文件,其中每个换行符的开头都包含一个模式:
./ bob / some / text / path / index.html
./bob/some/other/path/index.html
./bob/some/text/path/index1.html
./sue/some/text/path/index.html
./sue/some/text/path/index2.html
./sue/some/other/path/index.html
./john/some/text/path/index.html
./john/some/other/path/index.html
./john/some/more/text/index1.html
...等等。
我想出了以下代码来匹配./{name}/模式,并想打印每个名称出现1次的条件,但它要么打印出与该模式匹配的每一行,要么只打印1行并在使用时停止-m 1标志:
我已经尝试过将其作为简单的grep行(如下),并将其放入for循环中
name=$(grep -iEoha -m 1 '\.\/([^/]*)\/' ./without_localnamespace.txt)
echo $name
我期望的重用是:
./ bob /
./sue/
./john/
实际结果是:
./bob /
答案 0 :(得分:3)
awk -F'/' '!a[$2]++{print $1 FS $2 FS}' input
./bob/
./sue/
./john/
答案 1 :(得分:2)
你可以
cut -d "/" -f2 ./without_localnamespace.txt | sort -u
答案 2 :(得分:0)
您似乎想要独特的出现,使用
grep -Eoha '\./[^/]*/' ./without_localnamespace.txt | uniq
请参见online demo
关于模式,您不需要转义正斜杠,它们不是特殊的正则表达式元字符。 -i
标志在这里也是多余的。