일부 줄은 으로 시작 #
하고 임의의 숫자(하나 이상의 숫자), 로 시작합니다 =
. 해시로 시작하는 줄의 경우 줄 시작 부분부터 등호(포함)까지의 텍스트를 삭제합니다.
파일의 예:
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가 #
주석을 허용하기 때문일 것입니다.이내에정규식. ].