sed와의 첫 번째 적중 / 일치 만 삭제


5
$ echo -e "AsometAhingA\nsomethingA\nASomethiAng"
AsometAhingA
somethingA
ASomethiAng
$ echo -e "AsometAhingA\nsomethingA\nASomethiAng" | sed "s/A//"
sometAhingA
something
SomethiAng
$

sed "s/A//"모든 줄에서 첫 번째 일치 항목 을 삭제 한다는 것을 알고 있습니다. 그러나 텍스트 파일이나 스트림에서 첫 번째 일치 항목 만 삭제하고 싶습니다. 어떻게해야합니까? 처럼:sed -i "MAGIC" file.txt


답변:


5

불행히도 명령 MAGIC이 아니므로 sed다른 것을 사용해야합니다.

sed -i '0, / A / s ///'file.txt
perl -i -pe 'if (! $ changed) {s / A // 및 $ changed ++;}'file.txt
echo -e "/ A / s /// \ nwq"| ed file.txt

귀하의 sed솔루션에서 "AsometAhingA"가 SECOND 이상인 경우에도 "A"가 이전에 발생하지 않은 경우에도 여전히 작동합니까?
Marcos

7

그것이 GNU sed (Fedora이기 때문에 아마도 sed)라면, 당신은 할 수 있어야합니다 :

sed '0,/RE/{//d;}' file.txt

1
세미콜론이 필요한지 아십니까? 그것은 나에게 도움이되지 않는 것처럼 보이지만 길을 따라 어려움을 겪고 싶지 않습니다.
wchargin

2

sed회선 주소로 0을 지원하지 않는 (GNU가 아닌) 버전이있는 경우 다음을 수행 할 수 있습니다.

sed '/A/{s///;:a;n;ba}' file.txt

패턴이있는 줄을 찾을 때까지 각 줄을 그대로 인쇄합니다. 그런 다음 패턴을 삭제합니다. 그런 다음 ba(분기에서 "a"로) :a(라벨 "a")로 반복하고 패턴을 다시 찾지 않고도 각 행을 읽고 인쇄합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.