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
。