grepとsedを実行していますが、興味のある2行のファイルを取得しました。改行文字で終わる1行からこれらの行をどのように取得できますか?
今私は次を得ます:
pattern1
pattern2
欲しいpattern1 pattern2 \n
答え1
{...pipeline...} | paste -d " " - -
つまり、「stdin(最初の行-
)から1行を読み取り、stdin(2行目-
)から別の行を読み取り、スペースで連結します。」
bash 特定の技術:
$ x=$(grep -o pattern. test.txt)
$ echo "$x"
pattern1
pattern2
$ mapfile -t <<< "$x"
$ echo "${MAPFILE[*]}"
pattern1 pattern2
引用:http://www.gnu.org/software/bash/manual/bashref.html#index-mapfile
答え2
1行に3つのバージョンのメソッドを配置しました。
AWK
printf %s\\n pattern1 pattern2 | awk -vRS="\n" -vORS=" " '1; END {print RS}'
SED
printf %s\\n pattern1 pattern2 | sed '$!N;s/\n/ /'
TR
printf %s\\n pattern1 pattern2 | tr '\n' ' '; echo
もっとあります。
答え3
シェルスクリプトを使用するか、コマンドラインからこれを実行できます。コマンドの出力を変数に入れますecho
。
# x=$(grep -e "pattern1\|pattern2" test)
# printf '%s\n' "$x"
pattern1 pattern2
答え4
出力を次にパイプする簡単な方法xargs
:
$ echo -e 'a\nb' | xargs
a b
これはコマンドラインあたりの最大文字数によって制限されるため、小さな出力でのみ機能します。最大値はシステムによって異なり、を使用して値を取得できますgetconf ARG_MAX
。