$ echo "${BASH_VERSION}" 5.1.4(1)-release
Linux 5.18.0-17.1-liquorix-amd64 x86_64 GNU/Linux
문자열이 있고 export LIBVIRT_DEFAULT_URI='qemu:///system'
사용자의 문자열에서 전체 행을 찾아 삭제하고 싶습니다 ~/.profile
. 나는 좋은 방법을 모른다. sed 또는 awk의 일반적인 사용은 오류와 함께 실패하며 불행히도 나는 문제를 해결하는 방법을 추측하기에는 너무 멍청하거나 너무 게으르다(또는 둘 다).
어디에 $1
파일 이름이 있고 $2
검색할 문자열이 있습니다. 다음은 일반적으로 작동하지만 어떤 경우에는 실패하는 것 같습니다.
이것은 작동하지 않습니다: awk "!/$2/" "$1" > "$1".tmp && mv "$1".tmp "1"
이것도 작동하지 않습니다: sed -i "/$2/d" $1
이것도 작동하지 않습니다: awk -vLine="$2" "!index($0,$2)" file
모든 제안 및/또는 지시에 감사드립니다. 꼭 필요한 경우가 아니라면 Perl을 사용하고 싶지는 않지만 이 시점에서는 효과가 있는 쓴 약을 복용하겠습니다. 감사해요.
답변1
#! /bin/sh -
if [ "$#" -ge 2 ]; then
export LINE="${1?}"
shift
perl -ni -e 'print unless index($_, $ENV{LINE}) >= 0' -- "$@"
fi
다음과 같이 사용하세요:
that-script "export LIBVIRT_DEFAULT_URI='qemu:///system'" file1 file2...
export LIBVIRT_DEFAULT_URI='qemu:///system'
from 을 포함하는 행을 삭제하려면 file1
,file2...
index($_, $ENV{LINE}) >= 0
선택적 선행 공백 또는 후행 공백으로 구성된 행을 m{^\s*\Q$ENV{LINE}\E\s*$}
일치시키는 데 사용할 수 있습니다 .export LIBVIRT_DEFAULT_URI='qemu:///system'