패턴을 한 줄로 "병합"하는 방법은 무엇입니까?

패턴을 한 줄로 "병합"하는 방법은 무엇입니까?

grep과 sed를 수행 중인데 관심 있는 파일 2줄을 얻었습니다. 개행 문자로 끝나는 한 줄에서 이러한 줄을 어떻게 얻을 수 있습니까?
이제 나는 다음을 얻습니다:

pattern1  
pattern2  

나는 그것을 원한다pattern1 pattern2 \n

답변1

paste:

{...pipeline...} | paste -d " " - -

즉, "stdin(첫 번째 줄 -)에서 한 줄을 읽고, stdin(두 번째 줄 -)에서 다른 줄을 읽고, 공백으로 연결합니다."


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

한 줄에 세 가지 버전의 메서드를 넣었습니다.

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.

관련 정보