1行で出力するには、すべての行を接続してください。

1行で出力するには、すべての行を接続してください。

後続の新しい行なしでファイルの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に指示するオプションがあります。 3psedに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

関連情報