Linuxで区切り文字の前のテキストを削除する方法

Linuxで区切り文字の前のテキストを削除する方法

区切り記号の前の行のテキストを削除する必要があります。

たとえば、

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

まず、前のテキストを削除する必要があります:。つまり(123434)

これを実行できるコマンドはLinuxにありますか?

答え1

このsedコマンドはトリックを実行する必要があります。次のコマンドはファイルを上書きします。

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

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

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

答え2

あなたはそれを使用することができますcut

echo '(123434): hello::{apple,orange,mango}.' | cut -d: -f2-

答え3

非常に簡単な方法でこれを行うことができます。吹く指示:

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

最後の例では、パターンが一致しないため、何も切り捨てられません。

関連情報