很难提出问题,我会举例说明。 Txt文件有这些行
city:state:address
city:state
city:
我需要提取字符串
a) only one occurrences of :
b) only one occurrences of : and has value after :
c) two occurrences of :
并将这些字符串放到不同的文件中,因此一个文件将包含所有字符串
city:state:address
秒city:state
第三个city:
注意:文件有很多这样的字符串。在一个命令中创建三个文件不是强制性的。这将是一个命令,我可以定义应该包含多少:
字符串。
答案 0 :(得分:3)
使用这些grep调用并将输出传递到不同的文件中:
grep -E "^[^:]+:\s*$" file.txt
grep -E "^[^:]+:[^:]+$" file.txt
grep -E "^[^:]+:[^:]+:.*$" file.txt
它使用正则表达式:
查找不是[^:]+
的内容。它在开头和结尾使用^
和$
来匹配整个输入行。
答案 1 :(得分:3)
这是awk的工作,而不是grep。您所需要的只是:
awk -F':' '
NF==3 { print > "file_c"; next }
{ print > ($2=="" ? "file_a" : "file_b") }
' file
并且会在输入文件的一次传递中创建所需的所有文件。
如果您有更多字段和更多规则,只需将它们全部写下来,以便它们互相排斥,例如你可以实现上述:
NF==3 { print > "file_c" }
NF==2 && $2=="" { print > "file_a" }
NF==2 && $2!="" { print > "file_b" }