每次模式匹配都打印1次出现

时间:2019-06-17 20:14:47

标签: regex bash shell scripting grep

我有一个文件,其中每个换行符的开头都包含一个模式:

./ 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 /

3 个答案:

答案 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标志在这里也是多余的。