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
명명된 파이프는 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
처음 발생하지만q
1초 동안.위치 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
'programing' 카테고리의 다른 글
Azure 웹 앱을 배포할 때 메모리 위치에 대한 액세스가 잘못됨 (0) | 2023.04.29 |
---|---|
PowerShell에서 Windows 탐색기 창을 열 수 있습니까? (0) | 2023.04.29 |
튜플 리스트에서 n번째 요소를 추출하는 방법 (0) | 2023.04.24 |
CS1617: /langversion 옵션 '6'이 잘못되었습니다.ISO-1, ISO-2, 3, 4, 5 또는 기본값이어야 합니다. (0) | 2023.04.24 |
최신 Azure SDK를 사용하여 Blob 상에서 공유 액세스시그니처를 취득하는 방법NET API v12? (0) | 2023.04.24 |