アンパサンド(&)でsedを使用する

アンパサンド(&)でsedを使用する

私はSASファイルを個別に変更するのではなく、sedを使用して持っているSASファイルのパターンを見つけて置き換えます。問題は、マクロ変数を置き換えようとしますが、アンパサンドを使用すると正しく処理されないことです。

Here's my code:
sed -ie 's/user=&uid./user=&sysuserid./g' *_table_*.sas

このコマンドを実行するたびに、元のテキストが追加され、さまざまな奇妙な操作が実行されるようです。

Q:sedコマンドを使用してアンパサンドを含むテキストを置き換える方法は?

答え1

&代替テキストでは特別です。これは「パターンに一致する入力の全部分」を意味するため、ここで置き換える作業は、代替テキストに実際の&記号を挿入することuser=&uidXです。user=user=&uidXsysuserid.\&

間違って見えるもう1つの点は、.検索パターン内のすべての文字(改行を除く)を表しますが、テキストの末尾を置き換えるのが.リテラルな点です。リテラル文字列のみuser=&uid.を置き換えるには、.バックスラッシュで保護してください。

sed -e 's/user=&uid\./user=\&sysuserid./g'

1 つの文字を置き換えて結果に保持するには、その文字をグループに入れ、置換に使用して\1グループを参照してください。

sed -e 's/user=&uid\(.\)/user=\&sysuserid\1/g'

実際、元の項目と代替項目の間の重複を考慮すると、とにかくグループを使用する必要があります。

sed -e 's/\(user=&\)u\(id\.\)/\1sysuser\2/g'

つまり、「uと で置き換えsysuser」です。user=&id.

関連情報