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スクリプトレットを束ねる必要が"
あるため、いくつかの引用曲が[^']
進んでいます$1
。$2
\$1
\$2