diff 출력에서 ​​추가 문자 제거

diff 출력에서 ​​추가 문자 제거

유닉스에서 다음과 같은 출력이 있습니다.

$ diff -y --suppress-common-lines backup.txt newfile.txt
                                                              > `jjj' int,

그냥 jjj : int출력으로 필요합니다. 다음을 시도해도 예상대로 작동하지 않았습니다.

$ diff -y --suppress-common-lines backup.txt newfile.txt | grep -i '>' |tr -d '[>]'  |sed 's/,//g'

여기에 이미지 설명을 입력하세요.

답변1

다음과 같은 작업이 awk수행됩니다.

diff -y --suppress-common-lines backup.txt newfile.txt|awk -F'[>,]' '{gsub(/ /,"")} {print $2} '

답변2

다음을 통해 알 수 있습니다 diff.

diff --old-line-format= \
     --unchanged-line-format= \
     --new-line-format=%L backup.txt newfile.txt

출력을 사후 처리하려면 diff -y다음을 수행할 수 있습니다.

diff  -y --suppress-common-lines backup.txt newfile.txt |
  LC_ALL=C sed -n $'s/^[[:blank:]]*>\t//p'

backup.txt그러나 이와 같은 줄을 포함하는 것이 가능 하다면 완벽하지는 않습니다 [blanks]>[TAB][anything].

$'...'\tTAB 문자로 확장되는 ksh93(현재 일부 다른 셸에서도 지원됨)의 특수한 유형의 따옴표입니다 . GNU 구현에는 TAB(대괄호 표현식은 아니지만)과 이미 일치하는 sed가 필요하지 않습니다.\t

C로캘 에서는 [[:blank:]]공백이나 탭과 일치합니다.

파이프로 연결

tr -d \`\',

출력에서 `및 문자를 제거합니다 '.,

그리고:

sed 's/[[:space:]]\{1,\}/ : /g'

각 줄에 있는 하나 이상의 공백 문자 시퀀스를 " : ".

또는 두 명령을 하나의 sed명령으로 결합합니다.

sed 's/[`,'\'']//g; s/[[:space:]]\{1,\}/ : /g'

sed또는 병렬 출력을 사후 처리하는 명령과 결합됩니다.

sed $'s/^[ \t]*>\t/!d
      s///p
      s/[`,'\'']//g
      s/[[:space:]]\{1,\}/ : /g'

관련 정보