Bash 从管道输出中删除空白

Bash 从管道输出中删除空白,bash,grep,zsh,Bash,Grep,Zsh,在文本文件中,我有一些标记,标记为:foo。要获得文件中我的标记的概述,我想获得所有这些标记的列表 这是通过 grep -o -e ":[a-z]*\( \|$\)" file.txt | sort | uniq 现在,由于末尾的空格或换行符,我得到了重复的字符 :movie <-- only newline :movie <-- whitespace and newline :read :read 因为您没有提供示例输入文件,所以无法测试它,因为我没有带zsh。尝试以下

在文本文件中,我有一些标记,标记为
:foo
。要获得文件中我的标记的概述,我想获得所有这些标记的列表

这是通过

grep -o -e ":[a-z]*\( \|$\)" file.txt | sort |  uniq
现在,由于末尾的空格或换行符,我得到了重复的字符

:movie  <-- only newline
:movie  <-- whitespace and newline
:read
:read 

因为您没有提供示例输入文件,所以无法测试它,因为我没有带zsh。尝试以下内容,并让我知道这是否有助于你

awk '/:[a-z]*/{sub(/ +$/,"");} !a[$0]++' Input_file | sort

因为您没有提供示例输入文件,所以无法测试它,因为我没有带zsh。尝试以下内容,并让我知道这是否有助于你

awk '/:[a-z]*/{sub(/ +$/,"");} !a[$0]++' Input_file | sort
你可以试试sed

sed 's/.*\(:[a-z]*\).*/\1/' file.txt | sort | uniq
你可以试试sed

sed 's/.*\(:[a-z]*\).*/\1/' file.txt | sort | uniq
一些测试行(在第一个
:space
后面有一个空格,如果用鼠标突出显示数据,可以看到该空格):

使用
grep
sort
uniq

$ grep -o ":[a-z]\+" file | sort | uniq 
:space
有awk(好吧,至少是呆呆的):

每个单词都是它自己的记录,我们选择每个冒号起始单词的第一个实例
RS=“[“FS”|“RS”]+”
可以写成其他形式,但这种形式强调的是
FS
RS
的任何组合,一些测试行(第一行
后面有一个空格:空格
,如果用鼠标突出显示数据,可以看到):

使用
grep
sort
uniq

$ grep -o ":[a-z]\+" file | sort | uniq 
:space
有awk(好吧,至少是呆呆的):


每个单词都是它自己的记录,我们选择每个冒号起始单词的第一个实例
RS=“[“FS”|“RS”]+”
可以用其他方式编写,但这种形式强调的是
FS
RS
的任何组合。您可以使用Perl regexp和单词匹配:

grep -oP ':\w+' file.txt | sort |  uniq
或者,只匹配非空格字符:

grep -o ':[^ ]*' file.txt | sort |  uniq

您可以使用Perl regexp和单词匹配:

grep -oP ':\w+' file.txt | sort |  uniq
或者,只匹配非空格字符:

grep -o ':[^ ]*' file.txt | sort |  uniq

那是
:movie nippon
一个标签,也就是说,里面可以有空格,还是那两个标签?请用预期的输出发布一个适当的示例。@JamesBrown标记是一个单词,没有空格。那是
:movie nippon
标记,即,其中可以有空格,还是那两个标记?请发布一个具有预期输出的正确示例。@JamesBrown标记是一个单词,没有空格。您的答案看起来也不错,但在osx上有一些问题。Perl正则表达式不可用,无空格字符的匹配找到了比我需要的更多的匹配项。不过还是要谢谢你。你的答案看起来也不错,但在osx上有一些问题。Perl正则表达式不可用,无空格字符的匹配找到了比我需要的更多的匹配项。不过还是谢谢你。