web-dev-qa-db-ja.com

UNIXで特定の文字の後に文字列をカットする方法

だから私はこの文字列を持っています:

[email protected]:/home/some/directory/file

ディレクトリアドレスを抽出したいだけです。つまり、「:」文字の後のビットのみを取得し、次のようにします。

/home/some/directory/file

ありがとう。

$ var変数の長さが固定されていないため、カットコマンドが機能しないように汎用コマンドが必要です。

25
canecse

Sedの使用:

$ [email protected]:/home/some/directory/file
$ echo $var | sed 's/.*://'
/home/some/directory/file
35
falsetru

これはあなたのために働くかもしれません:

echo ${var#*:}

例10-10。パラメータ置換でのパターンマッチング を参照してください。

25
potong

完全を期すため、カットを使用

cut -d : -f 2 <<< $var

そして、bashのみを使用します。

IFS=: read a b <<< $var ; echo $b
10
chthonicdaemon

これも行います。

echo $var | cut -f2 -d":"
10
Manish V

これでうまくいくはずです:

$ echo "$var" | awk -F':' '{print $NF}'
/home/some/directory/file
7
Chris Seymour

使用しているシェルを言うことはありません。 BashなどのPOSIX互換の場合、パラメーターの展開で必要な処理を実行できます。

パラメータ拡張

...

${parameter#Word}

最小プレフィックスパターンを削除します。
Wordは、パターンを生成するために展開されます。パラメータを展開すると、parameterが生成され、パターンと一致するプレフィックスの最小部分が削除されます。

言い換えれば、あなたは書くことができます

$var="${var#*:}"

*:に一致するものはすべて$varから削除されます(つまり、最初の:までのすべて)。最後の:まで一致させたい場合は、##の代わりに#を使用できます。

これはすべて、削除する部分に:が含まれていないことを前提としています(IPv4アドレスには当てはまりますが、IPv6アドレスには当てはまりません)

4
Toby Speight
awk -F: '{print $2}' <<< $var
2
Jotne