sed
朝はインターネット検索をしてみましたが、うまく動作しないようです。
sed
で可能ですか?小文字2つの特定の文字間のテキスト:
つまり
SOMENAME=WOODSTOCK,
SOMEOTHERNAME=JIMMY,
できますか?小文字 WOODSTOCK
そしてJIMMY
=
(ウッドストックとジミに)彼らはと,
?
答え1
GNU sedはこれを達成できます。交換がどれほど欲しいかに応じて、これら2つの形式のいずれかを選択してください。
sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file
マニュアルに記載されているように, " or が見つかる\L
まで置換内容を小文字に変換します。"\U
正規表現に一致するテキストです。\E
&
=.*,
貪欲な正規表現と貪欲な正規表現の間で賢明に=[^,]*,
選択する必要があることを示すために、サンプルファイルを修正しました。
$ cat file
SOMENAME=WOODSTOCK,
SOMEOTHERNAME2=JIMMY,WOODSTOCK,FINISH
$ sed 's|=.*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,woodstock,FINISH
$ sed 's|=[^,]*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,WOODSTOCK,FINISH
答え2
すべてのPOSIX互換プラットフォームでこの機能をawk
使用できます。tolower()
awk -v FS='=' 'BEGIN { OFS = FS } { $2 = tolower($2) }1 ' file
このmktemp()
機能を使用して、上記のコマンドの出力をリダイレクトする一時ファイルを作成し、再度リダイレクトして保存します。またはGNU awk
> = 4.1を使用してください。-i inplace
POSIX互換バージョンの別のバリエーションは、match()
次の関数を使用して実行できます。
awk 'match($0, /=([^,]*),/) { str = substr($0, RSTART+1, RLENGTH-2); sub(str, tolower(str)) }1'