文字列リストを小文字に変更

文字列リストを小文字に変更

2つのファイルがあり、そのうちの1つに文字列のリストが含まれています。

+stringa +Dog +Cat
+cat +Tux +elephant

2番目のファイル(csv)には、次のような内容が含まれています。

"123456 Abc","+Stringx +123","something"
"23456 dEf","+cat +Tux +elephant","Other something"
"34524 xyz","+stringa +Dog +Cat","third something"

結果は次のとおりです。

"123456 Abc","+Stringx +123","something"
"23456 dEf","+cat +tux +elephant","Other something"
"34524 xyz","+stringa +dog +cat","third something"

私のパターンリストに一致する文字列を小文字に変更するにはどうすればよいですか?

私のカンマ区切り値ファイルには、約30個の列と約1500個の行があります。

ベストアンサー1

文字列リストにデフォルトのBREメタ文字以外にGNU sedメタ文字が含まれていないとします。+

$ # create substitute command for each line
$ sed 's/.*/s|"&"|\\L\&|gi/' f1
s|"+stringa +Dog +Cat"|\L&|gi
s|"+cat +Tux +elephant"|\L&|gi

$ # pass those commands as sed script
$ sed -f <(sed 's/.*/s|"&"|\\L\&|gi/' f1) ip.csv
"123456 Abc","+Stringx +123","something"
"23456 dEf","+cat +tux +elephant","Other something"
"34524 xyz","+stringa +dog +cat","third something"

$ # or save them in a file and use
$ sed 's/.*/s|"&"|\\L\&|gi/' f1 > f2
$ sed -f f2 ip.csv 
  • \L文字列を小文字に変換
  • gi大文字と小文字を区別せずに一致するように、1行のすべての項目を置き換えるために使用されます。


持っていない場合GNU sed

$ # \Q to quote metacharacters
$ # but will have issues if you have \ or $ or @
$ sed 's/.*/s|\\Q"&"|\\L$\&|gi;/' f1
s|\Q"+stringa +Dog +Cat"|\L$&|gi;
s|\Q"+cat +Tux +elephant"|\L$&|gi;

$ perl -p <(sed 's/.*/s|\\Q"&"|\\L$\&|gi;/' f1) ip.csv 
"123456 Abc","+Stringx +123","something"
"23456 dEf","+cat +tux +elephant","Other something"
"34524 xyz","+stringa +dog +cat","third something"


f1Stéphane Chazelasが指摘したように、コンテンツが制御されていないと、コード挿入の脆弱性が発生する可能性があります。

おすすめ記事