저는 정규식에 새로운 브랜드입니다. 파일의 줄을 주석으로 처리하는 스크립트를 작성하려고합니다. 그래서 우리가 네트워크 컴퓨터를 은퇴 할 때 수동으로 주석 처리 할 필요없이 관리 파일 (rdist 등)에서 제거 할 수 있습니다. 내가 지금까지 가지고하면 testfiles 일이 줄의 시작 부분에 표시 대상 문자열이있을 때,하지만 문자열 중간에 어딘가에하지 않을 경우이 작동regex/sed가 검색 문자열이있는 행을 인식하도록하려면 어떻게합니까?
#!/bin/bash
echo $*
NAMES=$*
FILES="/foo/testfile1
/foo/testfile2"
for name in $NAMES
do
sed -i "s/${name}/#&/g" $FILES
done
exit 0
입니다. 문자열의 시작 부분에 sed 또는 regex에 해시를 삽입하려면 어떻게해야합니까?
(나는 온라인 튜토리얼을 통해 자신의 길을 읽었지 만, 내가 원한 것에 가장 가까운 것은 캐럿^인 것 같다. 설명에서 얻은 것은 다중 행 모드에서만 행의 시작 부분에있는 문자열의 인스턴스를 반환합니다.
저는 RedHat 5.5에서 gedit 2.8.1을 텍스트 편집기로 사용하고 sed 4.1.2를 사용하고 있습니다.
도움을 주셔서 감사합니다.
얼마나 재미 있나. 마지막 단락에 완전히 동의하지는 않지만 전체 단어가 아닌 부분을 잘못 주석으로 처리합니다. 또한'\ &'전에는 본 적이 있지만'\ 0'은 본 적이 없습니다. 그게 효과가 있니? – SiegeX
@SiegeX : 그것은 GNU sed 4.2.1에서 작동합니다; 반사에, \ & 당연히 더 정확할 것입니다 - 그에 따라 내 대답을 편집 할 것입니다. 마지막 단락에 대해서 - 전체 단어가 아닌 단어의 의미에 대해 확장 할 수 있습니까? –
RE : 전체 단어가 일치하지 않음 : 매개 변수 중 하나가'bar' 인 경우's /^.*$ 이름. * $/# \ & /''이 스크립트는 fubar입니다. '행을 주석 처리합니다 우리는 피하려고 노력해야합니다. 우리는'\ < \>'과 일치하는 단어를 감싸서 sed에게 전체 단어들만 일치하도록 지시함으로써 이것을 할 수 있습니다. 두 번째 단락에 대한 나의 권고를 무시하고,'\ < \>'을 args 주위에'\ | '번갈아 사용하는 한 줄을 가질 수 있습니다. 그 스크립트는 그 시점까지 Klingon처럼 보일 것입니다. – SiegeX