sed内部のsedコマンド

sed内部のsedコマンド

sed次のように内部でコマンドを実行できますかsed

sed -i.bak -e '${sed -n 1,1p file.txt},$d' output.file

file.txt最初の行の番号を入力パラメータとして使用し、その行以降のoutput.fileすべての行を削除したいと思います。

答え1

sedこれは内部コマンドではなく、sed実際の呼び出し前にシェルが実行する代替コマンドですsed。正しい引用符と括弧を使用すると、操作が完了します。

sed -i.bak -e "$(sed -n 1,1p file.txt),\$d" output.file

二重引用符はプロセス内の置換を許可し(一重引用符は許可しません)、$()構文は内部コマンドの結果がキャプチャされ置き換えられることを意味します。変数として解釈されるのを防ぐにはエスケープが\$必要です。$d

同じ内容を書くあまり混乱しない方法は次のとおりです。

n=$(sed -n 1,1p file.txt)
sed -i.bak -e "${n}\$d" output.file

また、引用符で囲まれた別の文字列(引用符なしの文字列を含む)をまとめて作成することもできます"${n}"',$d'bash

またsed -n '1{p;q}' file.txt。まず、行番号だけを指定すると、範囲を書く必要はありません。第二に、最初の行()を印刷して終了すると、q何らかの理由でファイル全体を読み取らないため、より効率的です。最初の行なので-n省略可能です。またはhead -n1 file.txt

関連情報