[解決済み] ファイルの最初の行以降で正規表現にマッチする部分を取得する方法
質問
約1000行のファイルを持っています。grepステートメントにマッチする行の後の部分が欲しいのです。
ということです。
cat file | grep 'TERMINATE' # It is found on line 534
そこで、535行目から1000行目までのファイルをさらに処理したいのです。
どうすればいいのでしょうか?
どのように解決するのですか?
次のようにすると、一致する行が表示されます。
TERMINATE
ファイルの終わりまで
sed -n -e '/TERMINATE/,$p'
説明しています。
-n
のデフォルトの動作を無効にします。
sed
は、そのスクリプトを実行した後、各行を表示します。
-e
にスクリプトを表示しました。
sed
,
/TERMINATE/,$
は、アドレス(行)範囲の選択で
TERMINATE
正規表現(grepなど)からファイルの末尾(
$
) と
p
は、現在の行を表示するprintコマンドです。
に一致する行の次の行から印刷します。
TERMINATE
ファイルの終わりまで
(マッチした行の後からEOFまで。マッチした行は含まず)
sed -e '1,/TERMINATE/d'
説明しています。
1,/TERMINATE/
はアドレス(行)範囲の選択で、入力の1行目から
TERMINATE
正規表現、および
d
はdeleteコマンドで、現在の行を削除して次の行にスキップします。 として
sed
デフォルトの動作は、行を表示することです。
TERMINATE
を入力の最後に追加します。
の前の行が必要な場合は
TERMINATE
:
sed -e '/TERMINATE/,$d'
また、前後の両方の行が必要な場合は
TERMINATE
を2つの異なるファイルで一度に実行します。
sed -e '1,/TERMINATE/w before
/TERMINATE/,$w after' file
前後のファイルにはterminateの行が含まれるので、それぞれを処理するために
head -n -1 before
tail -n +2 after
sedスクリプトでファイル名をハードコードしたくない場合、可能です。
before=before.txt
after=after.txt
sed -e "1,/TERMINATE/w $before
/TERMINATE/,\$w $after" file
しかし、その場合は
$
を展開しようとしないように、最後の行を意味します。
$w
という変数があります(スクリプトをシングルクォートではなく、ダブルクォートで囲んでいることに注意してください)。
スクリプトのファイル名の後の改行が重要であることを伝えるのを忘れていたので、sedがファイル名の終わりを認識できるようにしました。
ハードコードされた
TERMINATE
を変数に変換してください。
一致するテキストを変数にして、前の例と同じようにするのです。
matchtext=TERMINATE
before=before.txt
after=after.txt
sed -e "1,/$matchtext/w $before
/$matchtext/,\$w $after" file
を使えば、前の例と同じようにマッチングテキストに変数を使用することができます。
## Print the line containing the matching text, till the end of the file:
## (from the matching line to EOF, including the matching line)
matchtext=TERMINATE
sed -n -e "/$matchtext/,\$p"
## Print from the line that follows the line containing the
## matching text, till the end of the file:
## (from AFTER the matching line to EOF, NOT including the matching line)
matchtext=TERMINATE
sed -e "1,/$matchtext/d"
## Print all the lines before the line containing the matching text:
## (from line-1 to BEFORE the matching line, NOT including the matching line)
matchtext=TERMINATE
sed -e "/$matchtext/,\$d"
このような場合のテキストを変数に置き換える重要なポイントは、以下の通りです。
-
変数(
$variablename
で囲まれている。single quotes
['
の中の変数は展開されません。double quotes
["
となります。そこで、すべてのsingle quotes
からdouble quotes
があり、変数に置き換えたいテキストが含まれている場合。 -
は
sed
の範囲も含まれます。$
のように、すぐ後に文字が続きます。$p
,$d
,$w
. これらは展開される変数のようにも見えるので、これらをエスケープする必要があります。$
の文字をバックスラッシュ [\
] のようになります。\$p
,\$d
,\$w
.
関連
-
[解決済み] Bashスクリプトのset -o pipefailの意味を教えてください。
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] ディレクトリが存在しない場合のみmkdirする方法は?
-
[解決済み] Bashでファイルの中身をループする
-
[解決済み] Linux で grep を使ってファイル名だけを表示するにはどうしたらいいですか?
-
[解決済み] grep --exclude/--include構文を使って特定のファイルをgrepしないようにする
-
[解決済み] ファイルからn行目を取得するBashツール
-
[解決済み] Colorized grep -- マッチをハイライトしてファイル全体を表示する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ambiguous redirect」エラーが発生する
-
[解決済み】Bashのif条件で「unary operator expected」エラーが発生する。
-
[解決済み】Bashのシンタックスエラー:予期しないファイルの終わり
-
[解決済み] 部分的にコピーされたファイルでscpを再開する方法は?[クローズド]です。
-
[解決済み] 値がベースに対して大きすぎる(エラートークンは "08")[重複]
-
[解決済み] シンプルなAsciiテーブルをCSVに変換する【終了】。
-
解決策:bash: /root/.bashrc: パーミッションが拒否されました
-
[解決済み] 絶対パスと論理パスの違い
-
[解決済み] シェルスクリプトでの連想配列
-
[解決済み] Bashのforeachループ