/etc/fstab
파일에 다음 줄이 있습니다
/dev/mapper/vg_D /data/container xfs defaults 0 0
하지만 행을 다음과 같이 일치시키려고 하면
LINE=/data/container
grep -qxF "$LINE" /etc/fstab || echo "line not in file !!!"
line not in line !!!
grep -qxF
라인이 안맞는 거같아 /data/container
우리가 어디에서 잘못됐나요? 그리고 라인을 일치시키는 방법은 무엇입니까?
답변1
이 매개변수를 사용하지 마세요 -x
. 전체 줄을 일치시키려고 시도합니다.
-x, --line-regexp
Select only those matches that exactly match the whole line. For a regular expression
pattern, this is like parenthesizing the pattern and then surrounding it with ^ and $.
/data/container
따라서 다른 내용이 포함되지 않은 줄만 일치합니다 .
답변2
견고성을 향상하려면 grep 대신 awk를 사용해야 합니다. 현재 grep 방법이 부분적으로 수정되어 제거되었더라도 -x
추가로 수정하더라도 -w
여전히 잘못된 일치 항목이 생성되기 때문 입니다. grep 명령을 다음으로 바꾸십시오.
awk -v line="$LINE" '$2==line{exit 1}' /etc/fstab
아니면 awk에서 인쇄하는 것이 더 좋습니다.
awk -v line="$LINE" '
$2==line { f=1; exit }
END { print (f ? "line inf file" : "line not in file"); exit !f }
' /etc/fstab
"$LINE"
백슬래시를 포함할 수 있는 경우 다음을 사용하십시오.
line="$LINE" awk '$2==ENVIRON["line"]...'
line
예를 들어 awk 설정을 사용하는 대신 -v
awk는 탭으로 변환되지 않습니다.\t