sed로 단어 바꾸기

sed로 단어 바꾸기

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/>

관련 정보