내 스크립트에서 두 문자열의 차이를 확인하는 방법을 찾으려고합니다. diff 또는 comm으로 쉽게 할 수 있지만 파일을 다루지 않고 파일로 출력하지 않고 비교하고 다시 읽는 것을 선호합니다.
comm, diff, cmp 모두 두 파일 또는 파일과 표준 입력을 전달할 수 있습니다. 두 파일을 출력하지 않으려면 좋을 것 같지만 여전히 약간 짜증납니다.
grep 또는 정규식을 사용할 수 있다고 생각하고 있었지만 그렇지 않은 것 같습니다.
내 스크립트에서 두 문자열의 차이를 확인하는 방법을 찾으려고합니다. diff 또는 comm으로 쉽게 할 수 있지만 파일을 다루지 않고 파일로 출력하지 않고 비교하고 다시 읽는 것을 선호합니다.
comm, diff, cmp 모두 두 파일 또는 파일과 표준 입력을 전달할 수 있습니다. 두 파일을 출력하지 않으려면 좋을 것 같지만 여전히 약간 짜증납니다.
grep 또는 정규식을 사용할 수 있다고 생각하고 있었지만 그렇지 않은 것 같습니다.
답변:
사용 diff
하거나 com
또는 당신이 원하는대로 :
diff <(echo "$string1" ) <(echo "$string2")
Greg의 Bash FAQ : 프로세스 대체
또는 명명 된 파이프
mkfifo ./p
diff - p <<< "$string1" & echo "$string2" > p
Greg의 Bash FAQ : 명명 된 파이프 작업
명명 된 파이프는 FIFO라고도합니다.
-
그 자체는 표준 입력을위한 것입니다.
<<<
"여기 문자열"입니다.
&
비슷 ;
하지만 배경에 넣습니다
FUNC(){ echo "$@"; "$@"; }; FUNC diff <(echo a) <(echo b);
$ diff <(echo "Here are the letters in String One.") <(echo "Here are the characters in String Two.")
\n
1c1
\n
< Here are the letters in String One.
\n
---
\n
> Here are the characters in String Two.
\n
은 다음과 같습니다 . 파이프를 사용하는 것은 프로세스 번호가 표시되고 다음 1c1
이후로 시작하고 $
<kbd> Enter <kbd>를 누를 때까지 기다린다 는 점을 제외하면 비슷합니다 (또는 다른 명령을 수행 할 수 있습니다 ...).
이 질문을 상기시킵니다. 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
및string2=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에서 ab는 첫 번째에 발생하지만 aq는 두 번째에 발생합니다. 위치 5에서 또 다른 차이가 발생합니다. 해당 문자열을 변수로 바꾸면 완료됩니다.
세 줄이 있다고 가정 해 보겠습니다.
a="this is a line"
b="this is"
c="a line"
a에서 접두사 b를 제거하려면
echo ${a#"$b"} # a line
a에서 접미사 c를 제거하려면
echo ${a%"$c"} # this is
echo "$a" | sed "s!^$b!!g"
(처리되는 변수가 경로 인 경우 표준 sed 구분 기호 / for!를 교체했습니다. 또한 echo : 대신 here 문자열을 사용할 수 있습니다 sed ... <<< $a
.)