SED交換ヘルプ

SED交換ヘルプ

C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe に交換したいです C:\Documents and Settings\USERNAME\AppData\Local\Microsoft\Teams\current\Squirrel.exe

echo "C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe" | \
    sed  -e 's/\\Documents and Settings\\*\\/\\Documents and Settings\\USERNAME\\/'

明らかにする

C:\Documents and Settings\USERNAME\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe

しかし、

echo "C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe" | \
    sed  -e 's/\\Documents and Settings\\.*\\/\\Documents and Settings\\USERNAME\\/'

返品

C:\Documents and Settings\USERNAME\Squirrel.exe

どんなアイデアがありますか?

答え1

あなたが求めているものを理解したら、「sjohnson4」をユーザー名に変更すると便利です。

sed 's/sjohnson4/USERNAME/'

これはsjohnson4を検索して置き換えます。これが必要でない場合は、お知らせください。

ジェイソンC.

答え2

バックスラッシュ(\)をフィールド区切り文字として使用すると、次のコードは無条件にawk3番目のフィールドを文字列に置き換えますUSERNAME

awk -F '\' 'BEGIN { OFS = FS } { $3 = "USERNAME"; print }'

テスト:

$ printf '%s\n' 'C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe' | awk -F '\' 'BEGIN { OFS = FS } { $3 = "USERNAME"; print }'
C:\Documents and Settings\USERNAME\AppData\Local\Microsoft\Teams\current\Squirrel.exe

上記のような方法を使用してくださいsed

sed 's/[^\]*\\/USERNAME\\/3'

[^\]*\\これは、3番目の発生(バックスラッシュではなく任意の数の後にバックスラッシュが続く場合)を文字列に置き換えますUSERNAME\

テスト:

$ printf '%s\n' 'C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe' | sed 's/[^\]*\\/USERNAME\\/3'
C:\Documents and Settings\USERNAME\AppData\Local\Microsoft\Teams\current\Squirrel.exe

答え3

「ユーザー名」と一致させたい場合

sed -E "s,(^.+and Settings\\\)[A-Za-z0-9]+(\\\AppData.+$),\1USERNAME\2,"

例:

$ echo "C:\Documents and Settings\ThisIsAnotherUsername15\AppData\Local\Microsoft\Teams\current\Squirrel.exe" | sed -E "s,(^.+and Settings\\\)[A-Za-z0-9]+(\\\AppData.+$),\1USERNAME\2," 
C:\Documents and Settings\USERNAME\AppData\Local\Microsoft\Teams\current\Squirrel.exe

答え4

スクリプトを変更するには、最小限の変更を行うだけです。

$ echo 'C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe' |
    sed 's/\(\\Documents and Settings\\\)[^\\]*/\1USERNAME/'
C:\Documents and Settings\USERNAME\AppData\Local\Microsoft\Teams\current\Squirrel.exe

関連情報