Removed '2022-01-30_01-00-05'
最後に抽出したい次のファイルがあります。
Removing '2022-01-30_01-00-05'...
0.46% complete (00:03:45 remaining)^M 5.49% complete (00:00:17 remaining)^M 24.90% complete (00:00:06 remaining)^M 60.56% complete (00:00:01 remaining)^M 82.12% complete (00:00:00 remaining)^M 82.39% complete (00:00:01 remaining)^M 84.24% complete (00:00:01 remaining)^M 86.48% complete (00:00:01 remaining)^M 88.58% complete (00:00:01 remaining)^M 89.66% complete (00:00:01 remaining)^M101.08% complete (00:00:00 remaining)^M104.62% complete (00:00:00 remaining)^M ^MRemoved '2022-01-30_01-00-05'
私はdos2unix
成功せずにこれを試しました。
以下でこれらのバリエーションを試しましたが、そうしても文字がless output
削除されないか、行^M
全体がキャプチャされません。
tr -d $'\r' < /file | grep "Removed" > output
tr -d '^M' < /file | grep "Removed" > output
tr -d ^M < /file | grep "Removed" > output
sed 's/\r//g' < /file | grep "Removed" > output
答え1
このgrep
コマンドは一致する行全体を印刷し、* nixの行は\n
およびnotによって定義されるため、\r
説明する内容は通常の動作です。つまり、最初のコマンドと最後のコマンド(thetr -d '\r'
とthe sed 's/\r//g'
)はどちらも期待どおりに機能します。単にgrepが期待したタスクを実行し、行全体を印刷するだけです。
印刷のみ可能部分grep
1行にはGNUとそのオプションが必要です-o
。たとえば、
$ grep -oP "Removed\s*'[^']+'" file
Removed '2022-01-30_01-00-05'
または\r
(^M
)を削除するのではなく、改行文字に変更してください。
$ tr '\r' '\n' < file | grep Removed
Removed '2022-01-30_01-00-05'
または
$ sed 's/\r/\n/g' file | grep Removed
Removed '2022-01-30_01-00-05'
答え2
dos2unix
\r
行の終わり()の前からコントロールMを削除します\n
。それはあなたが持っているものではなく、コントロール-Mがあります。変える行末。だからdos2unix
あなたを助けません。
マルチキャラクタRSにはGNU awkを使用し、\r
sおよび/または\n
sシーケンスをレコード区切り文字として使用します。
$ awk -v RS='[\r\n]+' '/^Removed/' file
Removed '2022-01-30_01-00-05'
答え3
awk '{for(i=1;i<=NF;i++){if($i ~ /Removed/){print $i,$(i+1)}}}' filename| awk '{gsub(/\^M/,"",$0);print }'
出力
Removed '2022-01-30_01-00-05'
答え4
入力ファイルにMac改行文字があります。 Unix 改行文字に変換できます。
dos2unix -c mac file
または
mac2unix file
ファイルの改行タイプを見つけるには、次のコマンドを使用できます。
dos2unix -ih file