特定の行の各単語の最初の文字を除いて、大文字を小文字に置き換えます。

特定の行の各単語の最初の文字を除いて、大文字を小文字に置き換えます。

大文字でのみ受け取った名前を変更したいと思います。これらの名前は他の情報と混在しているため、そのままにしてください。AUTH:行の先頭で名前を変更する必要がある行として識別します。

TITLE: Average title
AUTH: SUPERMAN
AFF: Something
AUTH: THE NEW ONE
AFF: Berlin
AUTH: MARS-MENSCH
AFF: Planet Mars

それではそうです。

TITLE: Average title
AUTH: Superman
AFF: Something
AUTH: The New One
AFF: Berlin
AUTH: Mars-Mensch
AFF: Planet Mars

私の問題はUnixの問題に関連していますが、違います」キリルアルファベットの最初の(大文字)文字を除くすべての文字を小文字にします。「ローマ字を使用しても提案されたソリューションを適用できなかったからです。

私が使用する対応する行を取得するには、何に変更するのかわからない部分にegrep -rl ^"AUTH:"従ってください。| xargs sed -r -i '/(AUTH:)/ ??? /\1/g'???

答え1

> sed '/^AUTH/{s/^AUTH: //;s/\b\([[:alpha:]]\)\([[:alpha:]]*\)\b/\u\1\L\2/g;s/^/AUTH: /;}' file
TITLE: Average title
AUTH: Superman
AFF: Something
AUTH: The New One
AFF: Berlin
AUTH: Mars-Mensch
AFF: Planet Mars

答え2

sed -e '/^AUTH:\([^[:alpha:]]*\)/!b' -e 'h;s//\1/;x;s///                                                                  
    s/\([[:alpha:]]\)\([[:alpha:]]*[^[:alpha:]]*\)/\1/g;x;s//\
\2/g
    y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;G;:l
    s/\n\(.*\n\)\(.\)/\2\1/;tl
    s/\(.*\)\n/AUTH:\1/
'<<\IN
TITLE: Average title
AUTH: SUPERMAN
AFF: Something
AUTH: THE NEW ONE
AFF: Berlin
AUTH: MARS-MENSCH
AFF: Planet Mars
AUTH: CONTRARY tO pOPULAR bELIEF, Lorem Ipsu'M is not simply random text. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance.                        
IN

文字を移植可能に翻訳するには、翻訳コマンドをsed使用し、翻訳する各文字を明示的に設定する必要があります。y///これは実際に非常にうまく機能します。混乱や推測が少ない。

これらのスクリプトはそれぞれ承認:行を2桁に分割 - 1つ以上のアルファベット文字で構成される一連の最初のアルファベット文字をewlineに置き換えます\n。他のビットは対応する最初の文字のみを含み、h行が翻訳されるとフィールドにあります。変換後、sed Getsはビットを保持し、\n各ewline文字を何も残らないまでループの最後のewlineの後の最初の文字に置き換えます。\n

これは何ですかlロレムの息sed上の行は、交換ループが始まる直前と同じです。

 \nontrary \no \nopular \nelief, \norem \npsum \ns \not \nimply \nand\
om \next. \norem \npsum \nomes \nrom \nections 1.10.32 \nnd 1.10.33 \
\nf "\ne \ninibus \nonorum \nt \nalorum" (\nhe \nxtremes \nf \nood \n\
nd \nvil) \ny \nicero, \nritten \nn 45 \nc. \nhis \nook \ns \n \nreat\
ise \nn \nhe \nheory \nf \nthics, \nery \nopular \nuring \nhe \nenais\
sance.\nCtpbLIinsrtLIcfsaodFBeMTEoGaEbCwiBTbiatottoevpdtR$

これ承認:行が承認されると、そのビットが削除され、最後に再挿入されたため、そこにはありませんが、後ろのスペースとその間に現れる可能性がある他の文字があります。すべての単語が\newlinesで始まるのがわかります。つまり、sed最後の文字以降の文字列のすべての文字を順番に置き換えます。sed各単語の最初の文字は大文字と小文字を区別せずに保存されます。別に保管しておき、後で交換します。

出力:

TITLE: Average title
AUTH: Superman
AFF: Something
AUTH: The New One
AFF: Berlin
AUTH: Mars-Mensch
AFF: Planet Mars
AUTH: Contrary to popular belief, Lorem Ipsu'M is not simply random text. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 Bc. This book is a treatise on the theory of ethics, very popular during the Renaissance.

答え3

最新バージョンのGNUを使用してくださいsed

sed -E '/^AUTH:/!b;s/([^\w:])(\w+)/\1\L\u\2/g'

以前のバージョンの場合:

sed -r '/^AUTH:/!b;s/([^[:alnum:]:])([[:alnum:]]+)/\1\L\u\2/g'

関連情報