`someString` complete(1)
백틱 사이에 "someString"이 필요합니다. 아래에서 시도했지만 작동하지 않습니다.
cat file.txt | grep '\`.*\`'
답변1
GNU를 통한 grep
지원폴리 메라 제 연쇠 반응확장하다:
grep -Po '(?<=`)[^`]*(?=`)' infile
또는 return a
, c
예를 `a`b`c`
들어할 수 있어요:
grep -Po '(?<=`)[^`]+(?=`(?:[^`]*`[^`]*`)*[^`]*$)'
백틱 쌍 사이의 모든 내용을 반환합니다.
팁:
(?<=...)
:과거를 돌아보면 긍정적이다.
(?=...)
:적극적이고 적극적인.
(?:...)
:비캡처 그룹.
[^`]*
: 백틱을 제외한 모든 문자`
그리고 awk
:
awk -F'`' '{ for(i=2; i<=NF; i+=2) print $i; }' infile
답변2
사용 cut
:
cut -d'`' -f2 < file.txt
답변3
grep
는 기본적으로 다음을 반환합니다.철사주어진 표현과 일치합니다. 따라서 표현식은 표현식과 일치하는 전체 행을 반환합니다.
grep
sed
를 사용하는 대신 찾고 있는 문자열이 포함된 줄을 편집 할 수 있습니다 .
줄에 백틱 문자열이 하나만 있다고 가정하면 첫 번째 백틱 이전의 모든 항목과 두 번째 백틱 이후의 모든 항목을 잘라낼 수 있습니다.
$ sed 's/[^`]*`//; s/`.*//' <file.txt
someString
백틱은 정규식에서 특별하지 않으므로 이스케이프할 필요가 없습니다. 백틱예는 쉘에 특별하지만(명령 대체가 도입됨) 작은따옴표로 묶인 문자열을 사용하기 때문에 쉘은 이를 특별하게 취급하지 않습니다.
\(...\)
캡처 그룹( in ) 의 역따옴표 사이의 문자열을 일치시킨 다음 전체 줄을 그것으로 바꾸는 것도 가능합니다 sed
(그러나 개인적으로 이것이 읽기를 좀 더 어렵게 만든다고 생각합니다).
$ sed 's/[^`]*`\([^`]*\)`.*/\1/' <file.txt
someString
위 표현에서 사용된 모든 것은 [^`]
"백틱이 아닌 특정 문자"를 의미합니다.
완전히 다른 접근 방식은 먼저 모든 백틱을 제거한 다음 줄의 공백 앞에 있는 모든 것을 제거하는 것입니다.
$ tr -d '`' <file.txt | sed 's/[[:blank:]].*//'
someString
문자 [[:blank:]]
클래스는 단일 공백 또는 탭 문자와 일치합니다.
이것은 분명히 백틱 문자열이 공백 문자가 포함되지 않은 단어이고 질문의 예에서와 같이 해당 줄에서 먼저 발생한다고 가정합니다.
돌아가기 grep
... 행당 표현식과 일치하는 비트만 반환하는 grep
비표준(그러나 일반적으로 구현되는) 옵션이 있는 경우 다음과 같이 사용할 수 있습니다.-o
$ grep -o '`[^`]*`' <file.txt | tr -d '`'
someString
먼저 백틱 문자열을 가져온 다음 백틱을 제거합니다. sed
한 줄에 여러 개의 백틱 문자열이 있는 경우 이 메서드는 다르게 동작합니다. 이 경우 이는 각 문자열을 해당 줄에 반환하는 반면 sed
변형은 다음을 제공합니다.첫 번째백틱 문자열.
답변4
명령 1
awk '{for(i=1;i<=NF;i++){if($i ~ /^`.*`/){gsub("`","",$0);print $i}}}' filename
Above command tested and worked fine