
root@server:~/foo$ cat INPUT.txt
limit. Current u'^'ZO
limit. Current usage'^'FR
limit. Current us'^'AS
limit. Current usage 95 %.'^'FR
limit. Cur'^'AEW
root@server:~/foo$ sed "s/limit.SOMEMAGIC/limit./g" INPUT.txt
limit.'^'ZO
limit.'^'FR
limit.'^'AS
limit.'^'FR
limit.'^'AEW
질문:"limit" ("Cur...") 뒤에 있는 문자열을 어떻게 제거할 수 있습니까? 까지: " ' " ? "SOMEMAGIC"을 검색해보세요 :)
답변1
당신은 그것을 사용할 수 있습니다 :
sed -e "s/^\(limit\.\)[^']*/\1/" < data
이는 limit.
줄의 시작 부분과 일치하며 그 뒤에는 가능한 한 많은 문자가 옵니다.그건 아니야'
\1
, ( )로 시작하는 부분 만 교체하십시오 . 데이터가 실제로 어떻게 보이는지에 따라 스키마와 대체 항목을 편집할 수 있습니다. 중요한 부분은 입니다 [^']*
.
답변2
사용 perl
(버전 > 5.10.0):
$ perl -pe "s/^limit\.\K(.*?)\'/\'/" file
limit.'^'ZO
limit.'^'FR
limit.'^'AS
limit.'^'FR
limit.'^'AEW
에서 perldoc perlrebackslash
:
\K This appeared in perl 5.10.0. Anything matched left of "\K" is not
included in $&, and will not be replaced if the pattern is used in a
substitution. This lets you write "s/PAT1 \K PAT2/REPL/x" instead of
"s/(PAT1) PAT2/${1}REPL/x" or "s/(?<=PAT1) PAT2/REPL/x".
Mnemonic: Keep.
답변3
표시되는 특정 입력에 따라 간단히 다음을 수행할 수 있습니다.
perl -pe "s/ Cur[^']*//" INPUT.txt
아니면,sed
sed "s/ Cur[^']*//" INPUT.txt
그러면 다음 공백과 Cur
문자가 아닌 문자가 최대한 많이 제거됩니다. '
네가 이걸 해야 한다면오직이전 단어가 이면 limit.
다른 답변 중 하나를 사용하거나 다음을 사용하세요.
awk "\$1~/limit\./{sub(/Cur[^']*/,\"\",\$2)}1;" INPUT.txt
awk 스크립틀릿을 묶어야 "
하기 때문에 몇 가지 인용 곡예가 진행되고 있으므로 and 로 [^']
이스케이프하지 않는 한 쉘은 이를 awk에 전달하기 전에 확장할 것입니다 $1
.$2
\$1
\$2