web-dev-qa-db-ja.com

Linuxで区切り文字の前のテキストを削除するにはどうすればよいですか

区切り文字の前の行からテキストを削除する必要があります。

例えば:

(123434): hello::{Apple,orange,mango}.

最初にテキストを削除する必要があります:。つまり、(123434)

Linuxにこのタスクを実行するコマンドはありますか?

17
user80538

このsedコマンドでうまくいくはずです。次のコマンドはファイルを上書きします。

sed -i 's/^[^:]*:/:/' file

出力だけを出力するには、-iフラグを削除します。出力を新しいファイルに入れるには、-iフラグを削除して、出力をリダイレクトします。

sed 's/^[^:]*:/:/' file > new_file
14
drs

cutを使用できます:

echo '(123434): hello::{Apple,orange,mango}.' | cut -d: -f2-
15
Joseph R.

これは非常に単純なBash命令で実行できます。

mytext="(123434): hello::{Apple,orange,mango}."

echo ${mytext#*)}

これは: hello::{Apple,orange,mango}.。接頭辞と接尾辞も同様の方法でカットできます。さらに、接頭辞と接尾辞の定義にはワイルドカードを含めることができます。

プレフィックスをカット-最初のプレフィックスまでのワイルドカード一致:${variable#prefix}

接頭辞の切り取り-最後の接頭辞のワイルドカード一致まで:${variable##prefix}

サフィックスの切り取り-サフィックスの最初のワイルドカード一致まで:${variable%suffix}

サフィックスの切り取り-最後のサフィックスのワイルドカード一致まで:${variable%%suffix}

一見不明瞭に見える場合があります。次の例を参照してください。

mytext="xAxBxAxBx"
echo ${mytext#*A}    # will print: xBxAxBx
echo ${mytext##*A}   # will print: xBx
echo ${mytext%B*}    # will print: xAxBxAx
echo ${mytext%%B*}   # will print: xAx
echo ${mytext%%C*}   # will print: xAxBxAxBx

最後の例では、パターンが一致しないため、何もカットされません。

5
user77422