パターンを1行に「マージ」する方法は?

パターンを1行に「マージ」する方法は?

grepとsedを実行していますが、興味のある2行のファイルを取得しました。改行文字で終わる1行からこれらの行をどのように取得できますか?
今私は次を得ます:

pattern1  
pattern2  

欲しいpattern1 pattern2 \n

答え1

paste:

{...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

関連情報