SEDを使用してファイルからレコード行を選択する方法

SEDを使用してファイルからレコード行を選択する方法

Apologies... Code that I shared earlier is incorrect, revising...

修正された質問:

まずは急いで申し訳ありません。私はQSHELLに初めて触れて、ちょうど学び始めました。

デフォルトでは、無効/特殊文字を含むテキストファイルがサーバーにアップロードされ、プログラムがそのファイルを処理する前に削除する必要があります。

たとえば、次のコンテンツを含むuploadfile.txtがあります。

ここに画像の説明を入力してください。

特殊文字を置き換えるには、次のコマンドを使用すると正常に機能します。

sed -e 's/[^a-zA-Z0-9&,-]/ /g' uploadfile.txt > outputfile.txt

  1. a to z小文字(az)
  2. A to Z大文字(AZ)
  3. 0-9
  4. &そしてシンボル
  5. ,斑点
  6. .期間

ところで、交換する前に報告/通信の目的で行を抽出する必要がありますが、どうすればよいかわからないと詰まっています。

だから私の質問は、行番号2、4、5を別々のtext.filesに抽出するにはどうすればよいですか?

よろしくお願いします。

この問題は解決しました、コメントで@adminbeeが提案したように、次のコマンドを使用しました。

sed -n '/[^[:print:]]/p' IFS/MM4R5FLR/S06013/myfile.POL > myfile.pol
助けてくれてありがとう。

答え1

2段階のアプローチが機能している場合は、最初にgrep無効な文字を含むすべての行をファイルに抽出してから、コマンドを使用してsed実際の置換を実行できます。

[:print:]あなたの目的は、特殊文字(「印刷できない」文字など)を削除することであるため、列挙文字の代わりにPOSIX文字クラスを試すことができます(理解しているgrep場合sed)。

したがって、最初に使用することができます

grep '[^[:print:]]' uploadfile.txt > invalid_lines.txt

アーカイブ目的で無効な文字を含むすべての行を抽出して実行します。

sed -e 's/[^[:print:]]/ /g' uploadfile.txt > outputfile.txt

または、確実な場合は、次のように内部編集を実行してください。

sed -i -e 's/[^[:print:]]/ /g' uploadfile.txt

ファイルからその内容を消去します。

答え2

~からsed ドキュメント(「テキスト一致で行を選択」)、同様に行を選択できます。

# First, report lines
sed -n '/[^a-zA-Z0-9&,-]/p' uploadfile.txt > reportfile.txt

# Then, correct and output text
sed -e 's/[^a-zA-Z0-9&,-]/ /g' uploadfile.txt > outputfile.txt

この-nオプションは、「p」コマンドが印刷する内容、つまり正規表現で選択された行全体のみを出力します。

関連情報