숫자로 시작하지 않는 모든 문자를 표시하기 위해 grep을 찾고 있습니다. 나는 다음과 같은 일을 했습니다.
grep -v '^[1-2]*[a-zA-Z]?' -o
하지만 작동하지 않습니다. 일부 정규 경험에 대한 아이디어가 있습니까?
답변1
grep -v '^[0-9]'
숫자로 시작하여 -v
( ) 와 일치하지 않는 모든 행을 출력합니다.^
[0-9]
예를 들어
$ cat test
string
string123
123string
1string2
$ grep -v '^[0-9]' test
string
string123
또는 숫자로 시작하는 모든 단어를 제거하려는 경우
sed 's/[[:<:]][[:digit:]][[:alnum:]_]*[[:>:]]//g'
또는 바로가기와 어설션을 사용하세요.
sed 's/\<\d\w*\>//g'
예를 들어
$ cat test
one
two2
3three
4four4
five six
seven 8eight
9nine ten
11eleven 12twelve
a b c d
$ sed 's/[[:<:]][[:digit:]][[:alnum:]_]*[[:>:]]//g' test
one
two2
five six
seven
ten
a b c d
답변2
어떻게 정의하느냐에 따라 다르다끈(예: 문자열에 구두점을 포함할지 여부) 하지만 다음과 같은 것으로 시작할 수도 있습니다.
grep -Po '\b[^[:digit:]].*?\b' file
답변3
숫자로 시작하는 줄에서 모든 단어를 제거하려면 sed
다음을 수행하세요.
sed 'x;s/.*//;G
s/[[:space:]][[:punct:]]\{0,1\}[0-9][^[:space:]]*//g
s/\n//'
...또는 숫자로 시작하지 않는 단어만 필요한 경우 각 단어를 별도의 줄에 인쇄하세요.
sed 'y/!\t "'"'?/\n\n\n\n\n\n/;/^[_[:alpha:]]/P;D"
...위의 작업은 꽤 잘 수행될 것입니다. 관련성이 있다고 생각되는 구분 기호에 대해 ewline 번역을 사용자 정의해야 합니다 \n
. y///
또한 sed
구현에 따라 백슬래시 이스케이프 문자 <tab>
대신 실제 값이 필요할 수도 있습니다.\t