sed
실제로 Linux 정규식을 사용하여 도움이 필요합니다 .
예를 들어 행이 다음과 같은 경우 대괄호 사이에 두 개의 매개변수를 변경해야 합니다.
mysqli_select_db($par1, $par2)<br/>
나는 그것을로 바꿔야 해.
mysqli_select_db($par2, $par1)<br/>
par1
일반적인 것이 필요하지만 항상 그런 것은 아닙니다 par2
.
답변1
좀 더 현학적 접근 방식 sed
:
sed 's/\(mysqli_select_db(\)\([^,]*\)\(,[[:space:]]*\)\([^)]*\))/\1\4\3\2)/g' file
s/
바꾸다\(
그룹 1 캡처 시작mysqli_select_db(
리터럴 문자열 일치\)
캡처 그룹 1 종료\(
그룹 2 캡처 시작[^,]*
쉼표가 아닌 모든 문자와 일치합니다.\)
끝 캡처 그룹 2\(
그룹 3 캡처 시작,[[:space:]]*
쉼표 및 선택적 공백 문자 일치\)
끝 캡처 그룹 3\(
그룹 4 캡처 시작[^)]*
)
문자가 아닌 문자와 일치\)
끝 캡처 그룹 4)
닫기)
명령/\1\4\3\2)/g
캡처 그룹 1, 4, 3, 2로 교체하고 닫습니다.)
답변2
당신은 그것을 사용할 수 있습니다 :
sed -E 's/(.*\()(.*), (.*)(\).*)/\1\3, \2\4/g' file_name
예를 들어
echo 'mysqli_select_db($par1, $par2)<br/>' | sed -E 's/(.*\()(.*), (.*)(\).*)/\1\3, \2\4/g'
출력은 다음과 같습니다.
mysqli_select_db($par2, $par1)<br/>
답변3
위의 예를 기반으로 한 대략적인 예는 다음과 같습니다. 물론 적응할 수 있습니다.
핵심은 반전할 두 그룹을 식별하여 두 번째 부분에서 사용하는 것입니다.
$ echo 'mysqli_select_db($par1, $par2)<br/>' | sed 's/mysqli_select_db(\(.*\), \(.*\))/mysqli_select_db(\2, \1)/'
밝혀지다
mysqli_select_db($par2, $par1)<br/>