0

たとえば、私のsrc.texは

SectionType * p = NULL;

そして私はそれをに変えたい

section_type * p = NULL;

私がやりたいのはSectionTypeを変更することですが、NULLは変更されません。y/ [AZ] / [az]を使用しましたが、これによりすべての行が変更されます。

私のsedは\L、\ l、\Uおよび\u関数をサポートしていません。バージョンは3.*で、GNUではなくFSFで配布されており、GNUはこの関数でうまく機能する可能性がありますが、当時は採用できませんでした。 GNUは、私がmsysで作業していて、GNUパッケージがないためです。

それを取得するための解決策はありますか?

4

2 に答える 2

1

ここから

CamelCaseまたはcamelCaseをcamel_caseに変換します。

sed -e 's/\([A-Z][a-z]\)/_\l\1/g' -e 's/^_\([a-z]\)/\1/g' file.txt

入力:

SectionType *p = NULL;
sectionType *p = NULL;
ABCSectionType *p = NULL;

出力:

section_type *p = NULL;
section_type *p = NULL;
ABC_section_type *p = NULL;
于 2010-11-09T03:22:55.860 に答える
1

これは、の別のバージョンをインストールしなくても機能するはずですsed。行の最初の単語でのみ大文字と小文字を変更します。

upper=$(printf "%s" {A..Z})
lower=$(printf "%s" {a..z})
sed "s/ /\n/;h;s/[^\n]*\n//;x;s/\n.*//;y/$upper/$lower/;G;s/\n//" inputfile

私のバージョンでsedは機能しませんy/[A-Z]/[a-z]/。各文字を明示的に含める必要があるため、変数を使用しました。私がそれらを作成した方法は、Bashやkshなどの一部のシェルだけが持っている機能によって異なります。簡単な割り当てを行うか、sedサポートしている場合は範囲​​を使用できます。

のバージョンsedが本当にうるさい場合は-e、セミコロンの代わりに使用することをお勧めします。このバージョンはその場合に機能するはずです:

sed -e "s/ /\n/" -e "h" -e "s/[^\n]*\n//" -e "x" -e "s/\n.*//" -e "y/$upper/$lower/" -e "G" -e "s/\n//" inputfile
于 2010-11-09T04:58:50.340 に答える