교체하기 전에 외부 프로그램을 통해 캡처 그룹을 파이프합니까?

Geremia

수있는 방법이 있나요 sed에 파이프를 만들고, 다른 프로그램으로 캡처 그룹 \1정규 표현식의 RHS에 그 프로그램의 출력에 동일을?

예를 들어, 달리기

sed 's/lorem ipsum \(foobar\)/\1/g' file.txt

"lorem ipsum foobar"를 "lorem ipsum faabar"로 대체하기 위해 " faabar" tr 'o' 'a'가되도록 다른 프로그램 (예 \1:) 통해 "foobar"를 파이프 sed할까요?

이것은 단순한 예입니다. 를 사용하지 않고도 "foobar"를 "faabar"로 변환 할 수 있다는 것을 알고 tr있습니다.

카밀 마시오 로프 스키

귀하 sed가 GNU sed. 사용할 수 있습니다 s/…/…/e.

e
이 명령을 사용하면 쉘 명령의 입력을 패턴 공간으로 파이프 할 수 있습니다. 대체가 이루어지면 패턴 공간에서 발견 된 명령이 실행되고 패턴 공간이 출력으로 대체됩니다. 후행 개행은 억제됩니다. 실행할 명령에 NUL 문자가 포함되어 있으면 결과가 정의되지 않습니다. 이것은 GNU sed 확장입니다.

( 출처 )

그것은 실행 주 전체 패턴 공간과 대체 전체 패턴 공간. 일반적으로 전체 라인입니다. 조각을 조작하려고합니다 : foobar. 패턴 공간을 조작하는 방법을 찾 foobar거나 foobar라인 처리가 끝날 때 이전 또는 이후 아무것도 누락하지 않고 잠시 동안 만 유지되도록 합니다. 또는 실제로 쉘에서 실행될 전체 라인을 준비합니다. 전자는 쉽게 할 수 없지만 후자는 할 수 있다고 생각합니다.

다음을 수행해야합니다.

  1. 모든 변경 ''"'"'코드를 주입 나중에 불가능하므로.
  2. '"$(printf … | external_command …)"'올바른 위치에 주사 하십시오.
  3. printf '%s' '및에 전체 줄을 포함 '합니다.
  4. 라인 실행

각 단계에서 이전 단계의 가능한 결과를 고려해야합니다. 당신의 패턴이 아닌 경우 예는 foobar있지만 foo'bar, 그 첫 번째 단계 후에는 위해 노력해야한다 foo'"'"'bar(필요한 경우 적절한 이스케이프와 함께).

올바르게 작성하면 절차가 모든 줄에 적용될 수 있습니다. 생성되는 셸 및 external_command수를 줄이려면 실제로 필요한 라인에 대해서만이 작업을 수행 할 수 있습니다.

예제를 해결하려면 :

sed "/lorem ipsum foobar/ {
   s#'#'\"'\"'#g
   s#\(lorem ipsum \)\(foobar\)#\1'\"\$(printf '%s' '\2' | tr 'o' 'a')\"'#g
   s#.*#printf '%s' '\0'#e
}"

전체 스크립트는 큰 따옴표로 묶여 있습니다. 이 때문에 "같은 문자 $가 이스케이프됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

교체하기 전에 외부 프로그램을 통해 캡처 그룹을 파이프합니까?

분류에서Dev

파이프 (C)를 통해 외부 프로그램에 쓰기

분류에서Dev

while 루프 외부에서 일부 값을 캡처해야합니다.

분류에서Dev

외부 이동식 드라이브에서 프로그램을 설치하는 것이 안전합니까?

분류에서Dev

일부 파일 전송 응용 프로그램에서와 같이 WiFi를 통해 장치 이름 (가변)을 게시하는 방법은 무엇입니까?

분류에서Dev

미리 만들어진 양식을 채우기 위해 외부 응용 프로그램의 XML 파일을 Orbeon Form Runner로 어떻게 전달합니까?

분류에서Dev

Regex는 캡처 그룹 외에 모든 것을 캡처합니다.

분류에서Dev

GDB를 첨부하기 위해 처음에 프로그램을 중지하는 방법은 무엇입니까?

분류에서Dev

내 프로그램에서 vim을 시작하고 Git 커밋과 같은 작성된 출력을 캡처하려면 어떻게해야합니까?

분류에서Dev

캡처하지 않는 그룹은 여전히 입력을 캡처합니다.

분류에서Dev

C #을 통해 외부 응용 프로그램 작동

분류에서Dev

처음부터 루트로 실행해야하는 GUI 프로그램을 파이썬으로 만들고 있는데, 어떻게해야합니까?

분류에서Dev

다른 Java 프로그램에서 JS 변수 값을 캡처하는 방법

분류에서Dev

쉘이 외부 명령 / 프로그램을 실행할 때-해당 프로그램에 파일 설명자가 있습니까?

분류에서Dev

SQL Server에서 콘솔 프로그램으로 예외를 캡처하는 방법은 무엇입니까?

분류에서Dev

Java 프로그램을 통해 웹 사이트에서 작업을 수행하려면 어떻게합니까?

분류에서Dev

네트워크에서 소켓을 통해 파일을 전송하는 동안이 프로그램에서 파일 전송 오류는 무엇입니까?

분류에서Dev

r에서 응용 프로그램을 통해 여러 파일 처리

분류에서Dev

Intent를 통해 응용 프로그램을 공유하기 전에 파일 이름 변경

분류에서Dev

Java 프로그램에서 C 프로그램으로 소켓을 통해 데이터 보내기

분류에서Dev

정규식에서 선택적 그룹을 캡처하려면 어떻게해야합니까?

분류에서Dev

JavaScript 정규식에서 처음으로 두 번째 캡처 그룹을 이스케이프하는 방법

분류에서Dev

JavaScript 정규식에서 처음으로 두 번째 캡처 그룹을 이스케이프하는 방법

분류에서Dev

내 winform에 단추를 추가하여 캡처 도구 응용 프로그램을 실행합니다.

분류에서Dev

Pandas에서 열을 만들기 위해 특정 정규식 캡처 그룹을 선택할 수 있습니까?

분류에서Dev

이전에 캡처되지 않은 이전 캡처 그룹을 기반으로 Regex를 일치시키는 방법이 있습니까?

분류에서Dev

대부분의 응용 프로그램을 업데이트 할 때마다 전체 프로그램을 다시 다운로드해야하는 이유

분류에서Dev

명령 줄을 통해 VLC에서 프로그램`PID` 전환

분류에서Dev

실행하기 전에 프로그램을 통해 모든 bash 명령을 수정하십시오.

Related 관련 기사

  1. 1

    교체하기 전에 외부 프로그램을 통해 캡처 그룹을 파이프합니까?

  2. 2

    파이프 (C)를 통해 외부 프로그램에 쓰기

  3. 3

    while 루프 외부에서 일부 값을 캡처해야합니다.

  4. 4

    외부 이동식 드라이브에서 프로그램을 설치하는 것이 안전합니까?

  5. 5

    일부 파일 전송 응용 프로그램에서와 같이 WiFi를 통해 장치 이름 (가변)을 게시하는 방법은 무엇입니까?

  6. 6

    미리 만들어진 양식을 채우기 위해 외부 응용 프로그램의 XML 파일을 Orbeon Form Runner로 어떻게 전달합니까?

  7. 7

    Regex는 캡처 그룹 외에 모든 것을 캡처합니다.

  8. 8

    GDB를 첨부하기 위해 처음에 프로그램을 중지하는 방법은 무엇입니까?

  9. 9

    내 프로그램에서 vim을 시작하고 Git 커밋과 같은 작성된 출력을 캡처하려면 어떻게해야합니까?

  10. 10

    캡처하지 않는 그룹은 여전히 입력을 캡처합니다.

  11. 11

    C #을 통해 외부 응용 프로그램 작동

  12. 12

    처음부터 루트로 실행해야하는 GUI 프로그램을 파이썬으로 만들고 있는데, 어떻게해야합니까?

  13. 13

    다른 Java 프로그램에서 JS 변수 값을 캡처하는 방법

  14. 14

    쉘이 외부 명령 / 프로그램을 실행할 때-해당 프로그램에 파일 설명자가 있습니까?

  15. 15

    SQL Server에서 콘솔 프로그램으로 예외를 캡처하는 방법은 무엇입니까?

  16. 16

    Java 프로그램을 통해 웹 사이트에서 작업을 수행하려면 어떻게합니까?

  17. 17

    네트워크에서 소켓을 통해 파일을 전송하는 동안이 프로그램에서 파일 전송 오류는 무엇입니까?

  18. 18

    r에서 응용 프로그램을 통해 여러 파일 처리

  19. 19

    Intent를 통해 응용 프로그램을 공유하기 전에 파일 이름 변경

  20. 20

    Java 프로그램에서 C 프로그램으로 소켓을 통해 데이터 보내기

  21. 21

    정규식에서 선택적 그룹을 캡처하려면 어떻게해야합니까?

  22. 22

    JavaScript 정규식에서 처음으로 두 번째 캡처 그룹을 이스케이프하는 방법

  23. 23

    JavaScript 정규식에서 처음으로 두 번째 캡처 그룹을 이스케이프하는 방법

  24. 24

    내 winform에 단추를 추가하여 캡처 도구 응용 프로그램을 실행합니다.

  25. 25

    Pandas에서 열을 만들기 위해 특정 정규식 캡처 그룹을 선택할 수 있습니까?

  26. 26

    이전에 캡처되지 않은 이전 캡처 그룹을 기반으로 Regex를 일치시키는 방법이 있습니까?

  27. 27

    대부분의 응용 프로그램을 업데이트 할 때마다 전체 프로그램을 다시 다운로드해야하는 이유

  28. 28

    명령 줄을 통해 VLC에서 프로그램`PID` 전환

  29. 29

    실행하기 전에 프로그램을 통해 모든 bash 명령을 수정하십시오.

뜨겁다태그

보관