다른 형식으로 입력 값을 두 번 sed하고 사용하는 단일 명령

다른 형식으로 입력 값을 두 번 sed하고 사용하는 단일 명령

다음 형식의 입력 값이 있는 파일이 있습니다 input-prefix:value.

두 번 다른 대체 항목으로 바꾸고 input-prefix이를 my-command replace1-prefix:value replace2-prefix:value. 단일 명령으로 이것이 가능합니까, 아니면 스크립트를 작성해야 합니까?

하나의 값으로 간단합니다

cat my-input-file | sed 's/input-prefix/replace1-prefix/' | xargs -r my-command

도움이 필요한 경우 TIA,

W.

답변1

패턴의 일부를 그룹화하고 \(\)나중에 참조 할 수 있습니다 \1(또는 \2패턴 \9에 더 많은 그룹이 있는 경우).

s/input-prefix:\(.*\)/replace1-prefix:\1 replace2-prefix:\1/

답변2

여러 값을 사용하는 것도 간단합니다. 먼저, sed가 파일에서 읽고 그 출력을 STDOUT. 그리고 sed@Philippos가 설명한 방식으로 작동합니다( \1첫 번째 캡처 그룹에 속하므로 두 번 사용됩니다). 명령을 실행하려면 xargs 명령에서 에코를 제거하기만 하면 됩니다. 호출된 명령을 보려면 매개변수를 추가하여 -t명령을 보거나 -p대화형으로 수행할 수 있습니다. 따라서 명령을 실행하기 전에 예/아니요를 명시해야 합니다.

user@pc:/tmp$ cat inputfile.txt 
input-prefix1:value1
input-prefix:value
input-prefix2:value2

user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt
input-prefix1:value1
replace1-prefix:value
replace2-prefix:value
input-prefix2:value2 

user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt | xargs -r echo my-command

짧은 참고 사항: 이는 입력 접두사가 바꾸려는 줄의 첫 번째 항목이고 값은 콜론 뒤의 나머지 줄 모두라고 가정합니다. 또한 명령 g의 수정 자는 .sedinput-prefix:inputfile.txt

관련 정보