나는 사용하고 싶다 echo "123|456|789" | sed 's/^\(.*|\)\(.*|\).*$/\1'
문자열을 끊고 개별 값을 얻으려고 합니다(파이프| 없이).
- 장면 1: 갖고 싶어
123
- 장면 2: 갖고 싶어
456
- 장면 3: 갖고 싶어
789
- 장면 4: 나는 얻고 싶다
123 456 789
답변1
무엇을 원하시는지 잘 모르겠으니 수리 명령으로 답변을 제한하겠습니다. 그것은해야한다:
에코 "123|456|789" sed /^(.|)(.|).*$/\1/'
(마지막 따옴표 앞에 /가 있음을 참고하세요)
그런 다음 출력을 제공합니다.
123|
이것이 당신이 원하는 것입니까?
답변2
echo '123|456|789' | sed 's/|.*//'
echo '123|456|789' | sed 's/^[0-9]*|//;s/|.*//'
echo '123|456|789' | sed 's/.*|//'
echo '123|456|789' | sed 's/|/ /g'
또는 사용하는 것을 가치있게 여기지 않는 경우sed
echo '123|456|789' | cut -f1 -d\|
echo '123|456|789' | cut -f2 -d\|
echo '123|456|789' | cut -f3 -d\|
echo '123|456|789' | cut -f1,2,3 --output-delimiter=" " -d\|
답변3
내 이전 답변은 버그를 수정했습니다. 제가 실제로 해결한 방법은 다음과 같습니다.
시나리오 4는 가장 복잡하므로 해결 방법은 다음과 같습니다.
echo '123|456|789' | sed 's/\([0-9]*\)|\([0-9]*\)|\([0-9]*\)/\1 \2 \3/'
마지막 \1, \2, \3은 "장식 괄호"( \( 및 \)) 사이에서 일치하는 부분을 선택합니다. 각 그룹은 다음 번호로 참조되므로 \1은 첫 번째 그룹을 나타내는 식입니다.
시나리오 1, 2, 3의 경우 단순화할 수 있지만 필요에 따라 잘라내어 붙여넣은 다음 //의 마지막 그룹 사이에 \1, \2 또는 \3을 추가하는 것이 더 쉽습니다. 나머지 장식용 괄호를 그대로 두어도 문제가 되지 않습니다.
이 솔루션은 원하는 수의 필드로 확장될 수 있지만 가능하다면 cut을 사용하는 것이 더 좋을 것 같습니다.
답변4
GNU sed를 사용하면 쉘 var에서 필드 번호를 언급하여 필드를 캡처할 수 있습니다.$n
n=2; # to get field number 2
echo "123|456|789" | sed -n "s/|/\n/$n;s/^[^\n]*|//;P"
시나리오 4의 경우 다음과 같습니다.
echo ... | sed -e 'y/|/ /'