也许是一个愚蠢的问题,但我有一个文本文件,需要显示第一个模式匹配的所有内容,即'/'。 (所有行都不包含空格)
example.txt文件:
somename/for/example/
something/as/another/example
thisfile/dir/dir/example
首选输出:
somename
something
thisfile
我知道这个grep代码会在匹配模式后显示所有内容:
grep -o '/[^\n]*' '/my/file.txt'
那么有没有办法完成相反的操作,也许rm匹配模式或反转后显示我的首选输出?
感谢。
答案 0 :(得分:1)
如果您正在调用grep
之类的外部命令,则可以使用sed
命令获得相同的结果,即
echo "something/as/another/example" | sed 's:/.*::'
something
不要专注于你想要保留的内容,而要考虑你要删除的内容,在这种情况下,在第一个'/'字符后面的所有内容。这就是sed
命令的作用。
前导s
表示替换,:/.*:
是要匹配的模式,/.*
含义与第一个/' char and all characters after that. The 2nd half of the
sed command is the replacement. With
::`匹配,这意味着无需替换。
sed的传统idom是使用s/str/rep/
,使用/
字符来分隔替换中的搜索,但您可以在初始s
之后使用您想要的任何字符(替换) )命令。
某些seds期望/
char,并希望特殊指示以下字符是sub / replace分隔符。因此,如果s:/.*::
不起作用,则s\:/.*::
应该有效。
IHTH。
答案 1 :(得分:0)
答案 2 :(得分:0)
假设文件名为“file.txt”
cat file.txt | cut -d "/" -f 1
这里,我们用“/”作为分隔符(-d“/”)来切割输入行。然后我们选择第一个字段(-f 1)。
答案 3 :(得分:0)
你只需要在一个否定的字符类中包含起始锚^
和/
。
grep -o '^[^/]*' file