sed
으로 수행하려는 대체 목록이 있습니다. 치환을 하나의 sed
명령으로 결합하는 대신, 나는 bash 루프의 반복에서 각 치환을 수행하고 싶다. 예를 들면 다음과 같습니다.다음 반복으로 bash 루프 반복 출력
cat ${input} |
for subst in "${substlist}"; do
sed 's/'${subst}'/modified_'${subst}'/g'
done > ${output}
각 반복마다 전체 스트림을 수정하지만 첫 번째 반복이 입력을받는 것으로 볼 수 있습니다.
이 패턴은 bash에서 가능합니까?
BTW,'$는 {substlist은}'문자열을 확대 - 일반적으로 말하자면 따옴표 붙이지 않은 확장을 통해 단어 분할에 의존하는 것이 아니라 적절한 배열을 사용해야합니다. 즉, 가장 좋은 방법은'substlist = ("first" "second" "third"); "$ {substlist [@]}"의 subst에 대한; do ... ... ' –
왜 그것들을 하나의'sed' 명령으로 결합하고 싶지 않으십니까? 그것이 몇 가지 대답입니다. – Barmar
BTW, 다른 모든'sed' 프로세스 (모든 이상한 이유로)에서 모든 치환을 한꺼번에 (즉, 동시에) 실행하려면 그 중 가장 적합한 '반복'의 종류는 재귀 함수 대 bash 'for' 루프. 예 :'multised() {case $ # 0) cat ;; 1) sed -e "$ 1";; *) local cur = $ 1; 시프트; sed -e "$ cur"| multised "$ @";; esac; }'배열로'substs'를 가지고 있다면'multised "$ {substs [@]}"<"$input" > "$ output"로 사용할 수 있습니다. –