2011-07-28 7 views
2

パターンの先頭から部分文字列を取得しようとしています。bashのパターンの最初の出現から始まる部分文字列の取得方法

私は単純にcutを使用しますが、パターンが長すぎる場合は機能しません。

result=`echo "test String with (element in parenthesis) end" | cut -d "(" -f 2-` 

編集:サンプルテスト:

INPUT: ("This test String is an input", "in") 
OUTPUT: "ing is an input" 

INPUT: ("This test string is an input", "in ") 
OUTPUT: "" 

INPUT: ("This test string is an input", "n") 
OUTPUT: "ng is an input" 

注:私は、単一文字、区切り文字を必要に応じて

、これはトリックを行うだろうカッコは入力があることを意味します両方とも文字列と区切り文字列を取ります。

+0

希望する出力は何ですか?私は正確な質問については不明です。 – matchew

+0

希望する出力は、元の文字列のサブセクションで、パターンとの最初の完全一致から始まり、元の文字列の最後で終了します。 – iliaden

+1

まだ明確ではありません - あなたはSAMPLE-INPUTとSAMPLE-OUTPUTの2つのテキストを過去に提供できますか?私たちに、一般的な方向でしか働かないものの例を教えてください。 – nhed

答えて

1

EDITED:結論

、要求されたものは、文字列からテキストの特定の部分文字列で始まり、行の終わりで終わるを解析するための方法でした。前述のように、これを実行する方法は数多くあります。ここにDELIMは "希望のサブストリングである1 ...

egrep -o "DELIM.*" input

は...です。

+0

は正確ではありません - 私は、1つの区切り文字で部分文字列を検索し、文字列の最後で終わる部分文字列を検索したいと考えています(\ n区切り文字にすることができます)。私は私の質問をより明確にするためにいくつかの例を追加しました。 – iliaden

+1

ええと、マルチ・チャール区切り文字から始まる文字列を行末まで取得できるようにしたいのですか?そうであれば、それを行う方法は複数あります。あなたの区切り文字が「DELIM」であると仮定します。 'sed 's /.* \(DELIM。* \)/ \ 1/'input' – Costa

+0

は正確ではありません - 最初に文字列ensを ")"とすれば何でもかまいませんが、次に "無効な参照\ 1 on' sコマンドのRHS" – iliaden

0

また

awk -v delim="in" '{print substr($0, index($0, delim))}' 
0

これは、外部プログラムなしで行うことができます。処理すべき文字列が$stringであり、デリミタがDELIMであると仮定すると:

result=${string#"${string%%DELIM*}"} 

内側部分代用は、$stringDELIM(もしあれば)除去の最初の発生から始まるすべてを。外側の部分はの先頭からその値を取り除き、DELIMの最初の出現からすべてを残すか、DELIMが出現しない場合は空の文字列を残します。 (変数stringは変更されません)

+0

これとは正反対の方法は? – atefth

関連する問題