输入(多行):
abc def ghi 123 345 456
abc def def ghi 123 345 456
abc def def def ghi 123 345 456
输出(将字符串/正则表达式从一行提取到一行):
def 345
def def 345
def def def 345
第一的..
echo "abc 123" | grep -Po "\Kabc|\K123"
但这会打印两行:
abc
123
第二:
echo -ne "abc def bac 123\nabc def def bac 123\nabc def def def bac 123 123\n" | grep -Po "def|123" | paste -d ' ' - -
但这表明:
def 123
def def
123 def
def def
123 123
我想:
def 123
def def 123
def def def 123 123
我无法使用tr删除\ n,在一行中可以多次找到def或345,然后每隔第二行删除\ n没有任何意义。我不能使用列分隔符。
和 perl
$ cat ip.txt
abc def ghi 123 345 456
abc def def ghi 123 345 456
abc def def def ghi 123 345 456 1234
$ perl -lane 'print join " ", grep { /def|123/ } @F' ip.txt
def 123
def def 123
def def def 123 1234
$ perl -lane 'print join " ", grep { $_ eq "def" || $_ eq "123" } @F' ip.txt
def 123
def def 123
def def def 123
-lane
这里-l
将从输入行中删除换行符,并在print
使用时将其添加回去,-a
将在行上自动分割输入行并将结果保存在@F
数组中,-n
将遍历输入行,但处理后不会自动打印行,并-e
允许从命令中提供Perl脚本线grep { /def|123/ } @F
将过滤@F
数组的所有元素(如果包含def
或)123
grep { $_ eq "def" || $_ eq "123" } @F
print join " "
打印从grep
输出获得的元素,并以空格作为定界符本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句