ファイルのヘッダーとフッターを除いて、ファイルの各行の後に文字列を追加したいと思います。そのため、以下のコマンドを使用してヘッダーとフッター以外の行の範囲を変更しましたが、ヘッダーとフッターが削除され、ヘッダーとフッター行を削除したくありません。
sed -n '2,5p; '"$str_var"'' abc.dat > abc.dat.temp
以下のコマンドを使用してヘッダーをスキップして他の行を変更しようとしても、フッター/ティーザー行を同じままにするオプションはありません。
sed '1! s/$/'"$str_var"'/g' abc.dat > abc.dat.temp
ヘッダーとフッター行を除くファイルのすべての行を変更する方法に関する提案とコマンドは、ヘッダー/フッター行を削除しないでください。
答え1
ヘッダーとフッターがそれぞれ1行であると仮定します。最初の行と最後の行は追加の処理をスキップします。デフォルトでは、すべての行が印刷されます。
$ seq 10 | sed '1n; $n; s/$/ hello/'
1
2 hello
3 hello
4 hello
5 hello
6 hello
7 hello
8 hello
9 hello
10
答え2
最初の行を除くすべての行sed
に異なる方法で使用して追加し、最後の行であれば前に進みます。s/$/.../
!
1
q
$
sed '$q ;1 !s/$/ append/' <(seq 10)
1
2 append
3 append
4 append
5 append
6 append
7 append
8 append
9 append
10
または以下を使用してくださいawk
。
awk 'BEGIN{ getline line} {print line; line=$0 " append";} END{print $0}' <(seq 10)
1
2 append
3 append
4 append
5 append
6 append
7 append
8 append
9 append
10
答え3
awk
行数に関係なくファイルの場合:
$ awk -v last=$(wc -l < input) 'NR!=1 && NR!=last { print $0 " and more stuff" } NR==1||NR==last { print }' input
header
foo and more stuff
bar and more stuff
baz and more stuff
quux and more stuff
freeble and more stuff
bletch and more stuff
footer
入力ファイルの行数を取得し、変数wc
に保存するために使用されます。awk
次に、ヘッダーとフッターを個別に印刷し、サフィックスを含む他のすべての行を印刷します。
NR!=1 && NR!=last {
print $0 " and more stuff"
}
NR==1 || NR==last {
print
}
答え4
私は次の方法でそれをしました
入力ファイル
10
20
30
40
注文する
for i in `awk '{print NR}' inputfile| wc -l| awk '{print $1-1}'`; do sed '2,'$i's/$/praveen/g' inputfile;done
出力
10
20praveen
30praveen
40