web-dev-qa-db-ja.com

sedを使用して文字列の最初の部分を削除します

これからどのように取得しますか:

randomcollege-nt\user90

これに:

user90

sedを使用していますか?

14
Roboman1723

単純なgrepを使用してuser90を検索します。

$ echo "randomcollege-nt\user90" | grep -o user90
user90

User90が一定でない場合、次のコマンドを使用してください:

$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90

最後にsedを使用して、ファイルをその場で編集します。

$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file

または、考えられるすべてのユーザーアカウントを一致させるには:

$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
15
Sylvain Pineau

ほとんどの場合Windowsからのdomain\username文字列からユーザー名を抽出するためにテキストを解析しています。上記の回答のほとんどは、特定のサンプル文字列のみを扱っています。

これを行う最良の方法は、sedで正規表現を使用して、\の後に続くものをすべて抽出することです。方法は次のとおりです。

sed 's|.*\\\(.*\)|\1|'

これはバックスラッシュ(ここではエスケープしているので.*)になるまですべて(\\)に一致し、バックスラッシュ(.*)の後はすべて一致しますが、グループをキャプチャします(つまり、括弧で囲みますが、エスケープする必要があるため、\(.*\))。これで、キャプチャグループとして文字列の\の後に来るものがすべて得られたので、\1で参照して印刷します。

上記のsedコマンドは、必ずしもrandomcollege-ntではなく、任意のドメイン名で使用できます。

$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90

$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username

$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
19
Alaa Ali

別のsed

$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90

またはPOSIXly:

$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
10
cuonglm

Sedを使用したいのは知っていますが、別のものを使用します...

echo "randomcollege-nt\user90" | cut -d'\' -f2
8
kervin

これが質問ですか?

$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90

文字列random college-ntが定数でない場合は、上/下のawkコマンドを使用してください。

5
Archemar

むしろ、「awk」を使用して「user90」をフィルタリングします。

echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
3
saptarshi nag


sedを使用すると、特定の文字の前の文字列内のすべてを削除します(二重角括弧[特定の文字]に定義)。

echo "randomcollege-nt\user90" | sed 's/.*[\]//'

.*[\] charの前のすべての(\)文字を空白文字(//)に置き換える手段

ファイルがあり、置換する場合は、sedコマンドで-iフラグを次のように使用します。

sed -i 's/.*[\]//' /path/to/FileName
1
αғsнιη

元の質問ではsedが要求されましたが、ここでは代替案が人気があることがわかります。

Bashを使用している場合、パラメーターの展開は最も簡単です。

Origin='randomcollege-nt\user90'
echo "${Origin#*\\}"

複数のバックスラッシュが予想される場合は、ハッシュ記号を2倍にします。

echo "${Origin##*\\}"

詳細については、man bashおよびParameter Expansionを検索してください。

1
Paddy Landau

この単純なgrepコマンドは仕事をします、

$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
1
Avinash Raj

誰かがコメントアウト# server_tokens off;をnginxから自動的に削除して、自動dev-opsを支援しようとしている場合:

Sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf

Ubuntu 16.04 LTSでnginx/1.12.1でテストおよび動作しています。サーバートークンをオフにしてNGINXをロックダウンするための関連する回答 here

0
jamescampbell