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正则表达式不可用,无空格字符的匹配找到了比我需要的更多的匹配项。不过还是谢谢你。