grep과 sed를 수행 중인데 관심 있는 파일 2줄을 얻었습니다. 개행 문자로 끝나는 한 줄에서 이러한 줄을 어떻게 얻을 수 있습니까?
이제 나는 다음을 얻습니다:
pattern1
pattern2
나는 그것을 원한다pattern1 pattern2 \n
답변1
{...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
.