我有一個file1有線條的
abc
dfg
hij
cab
我想匹配模式ab并file1列印到file2. 之后從file1. 然后file1有以下幾行
dfg
hij
并且file2有線條
abc
cab
目前,我正在使用兩行代碼
perl -ne '/ab/i && print' file1.csv > file2.csv
perl -n -i.bak -e 'print unless m/ab/' file1.csv
誰能給我一個單行 Perl 代碼?
謝謝,
uj5u.com熱心網友回復:
我會ed改用:
$ rm file2.csv # Just in case it already exists
$ ed -s file1.csv <<'EOF'
g/ab/.W file2.csv\
d
w
EOF
(對于與基本正則運算式匹配的每一行ab,將其附加到 file2.csv 并洗掉該行,然后最后將修改后的緩沖區寫回 file1.csv)。
但是一個簡單的 perl 單行:
$ perl -ni -e 'if (/ab/) { print STDERR } else { print }' file1.csv 2>file2.csv
這會將匹配的行列印到標準錯誤,并使用 shell 將其重定向到 file2.csv,同時僅使用不匹配的行就地修改 file1.csv。
uj5u.com熱心網友回復:
perl -i -ne'print { /ab/ ? *STDERR : select() } $_' file1.csv 2>file2.csv
但錯誤訊息最終以file2.csv.
這些版本不會遇到這個問題:
perl -i -ne'
BEGIN { open $fh, ">&=", 3; }
print { /ab/ ? $fh : select() } $_;
' file1.csv 3>file2.csv
perl -i -ne'
BEGIN { open $fh, ">", shift(@ARGV); }
print { /ab/ ? $fh : select() } $_;
' file2.csv file1.csv
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456739.html
標籤:perl
上一篇:在替換s///時是否應該使用\Q...\E來轉義元字符?
下一篇:perl腳本中的多個{}
