programing

Bash 문자열 차이

javajsp 2023. 4. 24. 22:27

Bash 문자열 차이

대본에 있는 두 문자열의 차이를 알아내는 방법을 찾고 있습니다.diff나 comm을 사용하면 쉽게 할 수 있지만, 파일을 취급하고 있지 않기 때문에 파일로 출력하지 않고 비교한 후 다시 읽고 싶습니다.

comm, diff, cmp는 모두 2개의 파일 또는 1개의 파일과 표준 입력 중 하나를 전달할 수 있습니다.두 개의 파일을 출력하지 않는 것이 좋을 것 같습니다.그래도 좀 구린데

GREP나 정규 표현을 쓸 수 있다고 생각하면서 여기저기 찾아다녔지만, 그럴 수 없을 것 같아요.

사용.diff또는com또는 당신이 원하는 것:

diff  <(echo "$string1" ) <(echo "$string2")

Greg's Bash FAQ: 프로세스 대체

또는 명명된 파이프로

mkfifo ./p
diff - p <<< "$string1" & echo "$string2" > p

Greg's Bash FAQ: 명명된 파이프 사용

명명된 파이프는 FIFO라고도 합니다.

-그 자체는 표준 입력용입니다.

<<<는 "여기 문자열"입니다.

&~와 같다;배경화면에 넣어주세요.

이런 질문이 생각나네어떻게 Bash에서 두 개의 파이프라인을 분리할 수 있죠?

bash 세션의 경우 다음을 수행할 수 있습니다.

diff <cmd1 <cmd2
diff <(foo | bar) <(baz | quux)

와 함께<익명 명명 파이프 작성 - bash에 의해 관리됨 - 임시 파일과 달리 자동으로 작성 및 파기됩니다.

따라서 명령어(grep, awk, sed 등)의 일부로 두 개의 다른 문자열을 분리할 수 있다면 다음과 같은 작업을 수행할 수 있습니다.

diff < grep string1 myFile < grep string2 myFile

(파일 행에 다음과 같은 것이 있는 경우)string1=very_complicated_value및 astring2=another_long_and_complicated_value': 파일의 내부 형식을 모르면 정확한 명령어는 권장할 수 없습니다.)

나는 더 좋다cmp및 bash의 프로세스 대체 기능:

$ cmp -bl <(echo -n abcda) <(echo -n aqcde)
  2 142 b    161 q
  5 141 a    145 e

포지션 2에서 말하는 것은b처음 발생하지만q1초 동안.위치 5에서 또 다른 차이가 발생하고 있습니다.변수별로 문자열을 바꾸기만 하면 됩니다.

3개의 현이 있다고 칩시다.

a="this is a line"
b="this is"
c="a line"

프리픽스 b를 a에서 삭제하려면

echo ${a#"$b"}  # a line

에서 서픽스 c를 삭제하려면

echo ${a%"$c"}  # this is

또 다른 예는 다음과 같습니다.

before="184613 102050 83756 63054"
after="184613 102050 84192 83756 63054"

comm -23 <(tr ' ' $'\n' <<< $after | sort) <(tr ' ' $'\n' <<< $before | sort)

출력

84192

원답은 이쪽

언급URL : https://stackoverflow.com/questions/454427/string-difference-in-bash