일련의 단어를 문자열 끝으로 이동

일련의 단어를 문자열 끝으로 이동

다음 문자열이 있습니다.

"5  S comment=whatever Unspecific text fruit=apple animal=mouse sky=blue"

문자열의 끝으로 이동해야 합니다. 모두 commentword 로 시작합니다 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

관련 정보