다음 문자열이 있습니다.
"5 S comment=whatever Unspecific text fruit=apple animal=mouse sky=blue"
문자열의 끝으로 이동해야 합니다. 모두 comment
word 로 시작합니다 text
.
시작은 항상 be comment=
이고 구분 기호는 항상 입니다 fruit
. comment=
...와 구분 기호 사이의 값 fruit
은 가변적입니다.
어떤 제안이 있으십니까?
답변1
문자열이 셸 변수에 있고 셸이 이면 zsh
다음을 수행할 수 있습니다.
string='5 S comment=whatever Unspecific text fruit=apple animal=mouse sky=blue'
new_string=${string/(#b)(comment=*)(fruit*)/$match[2] $match[1]}
쉘이 다음과 같은 경우 ksh93
:
new_strong=${string//@(comment=*)@(fruit*)/\2 \1}
쉘이 POSIX 쉘인 경우(예: 이 두 쉘 bash
또는 sh
최신 시스템의 쉘):
a=${string%%comment=*}
b=${string#"$a"}
b=${b%fruit*}
c=${string#"$a$b"}
new_string=$a$c$b
파일의 각 줄에 대해 다음을 수행합니다.
sed 's/\(comment=.*\)\(fruit.*\)/\2 \1/' < file
줄/문자열당 둘 이상이 있는 경우 세 부분 모두 가장 왼쪽에서 comment=
가장 오른쪽 부분으로 일치합니다.fruit