後続の新しい行なしでファイルの3行目と5行目をスクリプト出力に結合したいと思います。
次のコードを使用してこの構成を達成できますか?
{
echo 'Some text'
echo 'Some text'
echo -n 'Some text'
cat text
cat text
echo -n 'Some text'
echo 'Some text'
} > file
catの後にいくつかのオプションを追加できますか?
ファイルの行3と5がtext
それぞれ3と5であるとします。処理後は、次の形式を取る必要があります。
Some text
Some text
Some text35Some text
Some text
私が正しく理解した場合、私の場合、sedコマンドの実装はひどかった。
答え1
sedを使う
text
私が理解したのは、次のようなファイルです。
$ cat text
1
2
3
4
5
また、行3と5を抽出していくつかのステートメントの途中に配置しようとしていますecho
。その場合は、以下を試してください。
$ { echo 'Some text'; echo 'Some text'; echo -n 'Some text'; echo -n "$(sed -n 3p text)$(sed -n 5p text)"; echo 'Some text'; echo 'Some text'; } >file
$ cat file
Some text
Some text
Some text35Some text
Some text
単純化する
上記の操作は、echo
次のコマンドで完了できます。
$ echo $'Some text\nSome text\nSome text'"$(sed -n 3p text)$(sed -n 5p text)"$'Some text\nSome text' >file
$ cat file
Some text
Some text
Some text35Some text
Some text
または単一のprintf
コマンドで:
$ printf 'Some text\nSome text\nSome text%s%sSome text\nSome text\n' "$(sed -n 3p text)" "$(sed -n 5p text)" >file
$ cat file
Some text
Some text
Some text35Some text
Some text
sedコマンドの仕組み
たとえば、上記のsedコマンドを使用します。
sed -n 3p text
これには、-n
明示的に要求しない限り何も印刷しないようにsedに指示するオプションがあります。 3p
sedに3行目を印刷するように指示するコマンド。同様に5p
、ifを使用して5行目を印刷します。
awkを使う
awkソリューション(ヒント:Runium):
awk '
BEGIN{
printf "%s","Some text\nSome text\nSome text"
}
NR>5 {exit}
NR==3 || NR==5 {printf "%s", $0}
END{
printf "%s","Some text\nSome text\n"
}' text