줄이 문자로 시작하는 경우 같은 줄에 다른 문자가 나타날 때까지 텍스트를 삭제합니다.

줄이 문자로 시작하는 경우 같은 줄에 다른 문자가 나타날 때까지 텍스트를 삭제합니다.

일부 줄은 으로 시작 #하고 임의의 숫자(하나 이상의 숫자), 로 시작합니다 =. 해시로 시작하는 줄의 경우 줄 시작 부분부터 등호(포함)까지의 텍스트를 삭제합니다.

파일의 예:

some text
#5=get('data');
;done;

결과물 파일:

some text
get('data');
;done;

답변1

sed 's/^#[[:digit:]]\{1,\}=//' < file.in > file.out

대부분의 sed구현에서 이 옵션을 사용하여 다음으로 대체할 수 -E있는 확장 정규식을 얻을 수 있습니다 .\{1,\}+

sed -E 's/^#[[:digit:]]+=//' < file.in > file.out

[[:digit:]]해당 로케일에서 십진수로 분류된 문자와 일치합니다. GNU 시스템에서는 항상 와 일치합니다 [0123456789]. 다른 경우에는 다른 십진수와 일치할 수 있습니다(0123456789 제외). 일치 항목 은 [0-9]일반적으로 다소 무작위이지만 항상 0123456789를 포함하고 다른 ASCII 문자는 포함하지 않습니다. 확실하지 않고 정확히 무엇과 일치시키려는 경우 를 사용하십시오 [0123456789].

또는 다음을 사용할 수 있습니다 perl.

perl -pe 's/^#\d+=//' < file.in > file.out

\d[0123456789]해당 옵션을 전달하지 않는 한 일치합니다 -C. 이 경우 입력을 UTF-8로 인코딩된 것으로 해석하고(로캘이 UTF-8을 사용하는 경우) 유니코드가 10진수로 분류하는 문자와 일치합니다(예: 0123456789٠١٢٣٥٦٧٨٩0123456789 ໐໑໒໓໔໕໖໗໘ ໙

답변2

사용 awk:

$ awk '{sub(/^#[[:digit:]]+=/, "")}1'

사용 pcregrep:

$ pcregrep -o2 '(^#\d+=)?(.*)' file

-o2두 번째 캡처된 그룹을 인쇄합니다 (.*).

@StéphaneChazelas 덕분에 모든 정규식.

~에서pcregrep수동:

-영형숫자,--일치만=number는 주어진 숫자의 캡처 괄호와 일치하는 줄 부분만 표시합니다.

답변3

사용행복하다(이전 Perl_6)

~$ raku -pe 's/^ "#" \d+ \= //;'  file.txt

또는:

~$ raku -pe 's/^ 「#」 \d+ \= //;'  file.txt

위 내용은 Perl 계열의 프로그래밍 언어인 Raku로 작성된 답변입니다. 기본적으로 저는 @StéphaneChazelas의 뛰어난 Perl 답변을 가져와 Raku로 번역했습니다.

Raku에는 많은 사람들이 더 쉽게 이해하고 사용할 수 있는 새로운 정규식 엔진이 있습니다. 예를 들어, 위의 개별 정규식 "atoms"는 공백으로 자유롭게 구분할 수 있습니다(이것은 분명히 Perl의 /x옵션과 동일합니다). 또한 \d(축약된) 형식은포함하다유니코드 숫자. 따라서 ASCII 숫자만 필요한 경우 [<:ASCII> & <:N>](유니코드) 형식이나 <[0..9]>(사용자 정의 문자 클래스) 형식을 사용하세요.

입력 예:

some text
#5=get('data');
;done;

예제 출력:

some text
get('data');
;done;

이스케이프 문자에 대한 참고 사항: 모두Raku 정규식의 문자가 아닌 문자는 alnum리터럴로 이해되도록 이스케이프하거나 인용해야 합니다( , 등의 문자가 아닌 문자를 생각 하고 alnum나머지 비 문자 는 향후 메타 문자 사용을 위해 예약되어 있다고 상상해 보세요).\.\*\+alnum

[경고: 문어소프 문자는 여기서 #필수 "…"이거나 인용된 것으로 보입니다. 「…」백슬래시 이스케이프 처리가 내 손으로는 안되는 것 같습니다. 아마도 Raku가 #주석을 허용하기 때문일 것입니다.이내에정규식. ].

https://docs.raku.org/언어/regexes
https://raku.org

관련 정보