指定された文字列から始まり、指定された文字まで削除します。

指定された文字列から始まり、指定された文字まで削除します。
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

関連情報