0

一度にいくつかのフォルダーの名前を変更するチュートリアルのコマンドにやみくもに従っただけです。sed の -e オプションの引数として指定された「p;s」の意味を誰でも説明できますか。

[root@LinuxD delsure]# ls
ar1  ar2  ar3  ar4  ar5  ar6  ar7
[root@LinuxD delsure]# find . -type d -name "ar*"|sed  -e "p;s/ar/AR/g"|xargs  -n2  mv
[root@LinuxD delsure]# ls
AR1  AR2  AR3  AR4  AR5  AR6  AR7
4

3 に答える 3

1

sedスクリプト (オプションの後のビット)-eには複数のコマンドを含めることができます。;

あなたの例のスクリプトは、pコマンドを使用してパターンスペース(つまり、入力から読み取った行)を出力し、その後sにパターンスペースで置換を実行するコマンドを使用します。

デフォルトでは (パターンスペースがクリアされるか、-nオプションが sed に指定されない限り) 各行を処理した後、現在のパターンスペースラインが再度出力されるため、置換の結果が出力されます。

同じことを別の方法で書くと、次のようになります。

sed  -e "p" -e "s/ar/AR/g"

これにより、コマンドが 2 つのスクリプトに分割されます。別の方法は次のとおりです。

sed "p;s/ar/AR/g"

sed への唯一の引数がスクリプトである場合、-eオプションは必要ないため

于 2013-02-13T11:43:37.207 に答える
1

-e オプションの引数は、2 つのコマンドで構成されるスクリプトです。1 つ目はp、純粋な入力を出力する で、2 つ目は標準的なグローバル置換です。したがって、入力ar1の場合、これは出力する必要があります

ar1
AR1

このトリックのもう 1 つの部分は、xargs の -n2 オプションです。これは、一度に 2 つの引数のみを使用するように強制します (処理できる限り多くの引数を使用すると、非常に異なる結果が生成されます)。

于 2013-02-13T11:36:41.590 に答える
0

bashの1つの方法:

$ ls
ar6  ar7

$ find . -name 'ar*' | while IFS= read -r file; do echo mv "$file" "${file^^}"; done
mv ./ar6 ./AR6
mv ./ar7 ./AR7

出力に満足したら、「エコー」を取り除きます。

于 2013-02-13T22:22:30.990 に答える