2012-03-22 6 views
3

하나의 파일 (예 : test.txt)이 있는데,이 파일에는 몇 개의 행이 들어 있습니다. 예를 들어 한 행은 다음과 같습니다. abcd = 11 예 : abcd = 12 번호는 다르지만 abcd =는 모든 경우에 똑같은 사람이 내게이 라인을 찾아서 제거하라는 명령을 내릴 수 있습니까?Unix에서 파일에서 행을 찾아 제거하는 방법은 무엇입니까?

시도 : sed -e \"/$abcd=/d\" /test.txt >/test.txt하지만 내 파일에서 모든 줄을 제거하고 또한 시도했습니다 : sed -e \"/$abcd=/d\" /test.txt >/testNew.txt하지만 test.txt에서 줄을 지우지 않고 새 파일 (testNew.txt) 만 만들고이 파일에 있습니다 그것은 내 라인을 제거합니다. 그러나 그것은 내가 원하는 것이 아닙니다. 텍스트에 설명을 바탕으로

$ cat test.txt 
a 
b 
ab 
ac 
$abcd=1 
$abcd=2 
$abcd 
ab 
a 
$abcd=3 
x 

$ grep -v '^\$abcd=' test.txt 
a 
b 
ab 
ac 
$abcd 
ab 
a 
x 
+1

$ ABCD를 TEST.TXT 삭제 한 후 TEST.TXT이 이름을 바꿀 수 있습니다 원하는 경우 tmp.txt는 내용

a b ab ac $abcd ab a x 

을해야합니다 지금이

 grep -v '^\$abcd=' test.txt > tmp.txt 

을해야 할 것 쉘에 의해 파싱 될 것입니다. 그 쉘 var가 정의되어 있지 않으면 인수에서 효과적으로 "삭제"됩니다. 그것은 당신의 sed 호출을'\ "/ =/d \"'하고'='가있는 모든 행을 토스트합니다. –

답변

9

, 여기서 일해야 당신 나오지 스크립트의 청소 업 버전 : 개념의

$ grep -v '^\$abcd=' test.txt 

증명 :

0

는 여기에 솔루션을 사용하여 그렙입니다 . 이 문제가 해결되지 않는 경우

당신이 OS-X를 사용하는 경우 리눅스 GNU이

sed -i '/abcd=/d' /test.txt 

을 나오지 가정하면, 당신은 다음과 구식 sed를 사용

sed -i "" '/abcd=/d' /test.txt 

필요 조건부 mv를 사용하여 tmp 파일을 관리하십시오.

sed '/abcd=/d' /test.txt > test.txt.$$ && /bin/mv test.txt.$$ test.txt 

참고 :

당신이 \"/$abcd=/d\"하고있는 이유는 확실하지, 당신은 당신이 코드로 더 많은 일을하지 않는 한 당신이 (eval를 사용하여 같은) 표시보다 " 문자를 이스케이프 할 필요가 없습니다. "/$abcd=/d"으로 작성하십시오.

일반적으로 당신은

당신이 정말로 사용하려면 '-e'다음 ABCD = ','당신이 문자열을 일치하고 같은 $ ABCD를, 당신은 그것을 값을 제공 할 필요가 AND '필요하지 않습니다 할 수있다

abcd='abcd=' 
sed -i "/${abcd}/d" /test.txt 

나는 이것이 도움이되기를 바란다.

+0

그것은 작동하지 않습니다, 내 파일에서 해당 줄을 제거하지 않습니다. – Adam

+0

이상하게 잘 처리되었습니다. 아마도 GNU grep의 다른 버전이 여기에 사용됩니다 ... – AlG

0

내가 아는 한,이 명령은 삭제 된 줄이있는 다른 파일을 만드는 데 사용할 수 있습니다. 이제는 다른 파일을 만들었으므로 원하는 경우 해당 파일의 이름을 바꾸고 원본 파일을 삭제할 수 있습니다. 당신은 당신이

관련 문제