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


16

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

例えば:

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

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

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


あなたはに見たいと思うかもしれませんsedawk
ポール・

このテキストはファイルの一部ですか、それともbash変数の一部ですか?
ベルンハルト14

ファイルの一部です。
user80538 14

回答:


14

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

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

出力を印刷するには、-iフラグを削除します。出力を新しいファイルに配置するには、-iフラグを削除して出力をリダイレクトします。

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

行は魔法をかけました...ファイル自体で出力が置き換えられました。
user8053814

両方のファイルからテキストを削除した後、sdiffを使用して2つのファイルを比較すると、削除されたテキストが表示されます。このコマンドは、ファイルを上書きするか、単に出力を表示します。
user80538 14

上記のコマンドに簡単な変更を加えることで、私の例から「hello」と{apple、orange、mango}を抽出できますか?
user80538

@ user80538、このコンテキストで抽出と言ったときに何が欲しいかを伝えるのは難しいです。これは大きなシェルスクリプトの一部ですか?解決しようとしているより大きな問題の詳細を含む新しい質問をすることもできます。
博士

これは、同じデータを持つ2つのファイルの単純な比較ですが、2つのファイルのどこでデータが異なっているかを見つけるだけです。行の各セクションを確認する必要があります。個々のセクションのデータは混乱する場合があります。{apple、mango、orange}は{apple、orange、mango}のようになります。
user80538


5

これは、非常に単純な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

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


を使用する方が堅牢echo ${mytext#*:}:です。これは(123)(434): hello::{apple,orange,mango}.、やなどの行を適切に処理し123434: hello::{apple,orange,mango}ます。
博士14

コマンドを変更するにはそこにどのような方法は、あなたの例ではB.後のテキストを取得するために、$ {MYTEXT %% B *}をエコーされる
user80538

最初のBの後のテキストのために$ {MYTEXTは#* B}、および$二B.後のテキストのための{MYTEXT ## * B}:@ user80538はい、ちょうどすなわちB、包括;-)、前のテキストをカット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.