3

ファイル内で、一致させようとしているパターンを見つけました。それを見つけたら、上に行を挿入しますが、パターンスペースを取得して、挿入しようとしている行に追加することができないようです。そのようです:

/xxx/ i\inserting this line and &

「&」がsの場合と同じようにパターンスペースを印刷することを期待しています

よろしく、事前に感謝しますクレイ

4

3 に答える 3

2

これはうまくいくかもしれません(GNU sed):

sed -er '/.*(xxx).*/s//inserting this line and \1\n&/' file

コメントを参照して:

sed '/public String getFirstName()/s/.*\("[^"]*"\).*/@XmlElement(name=\1)\n&/' file
于 2012-11-08T10:33:18.307 に答える
0

私も自分で解決策に取り組んできました。この同様のシナリオでは、パブリッククラスラインがあります

public class SomeStatusCode extends AbstractEntity implements Serializable {

その上に@XmlRootElementアノテーションを追加したいと思います。.sedファイルには次のものがあります

/public class [A-Za-z0-9]* .*/ {
        h
        s/public class \([A-Za-z0-9]*\) .*/\1")/    
        s/^/@Xml RootElement(name = "/
        p
        x
}

結果は次のとおりです。

@Entity
@Table(name="SOME_STATUS_CODE")
@Xml RootElement(name = "SomeStatusCode")
public class SomeStatusCode extends AbstractEntity implements Serializable {

したがって、最終的には、自分の行の上にその行のコンテンツを含む行を挿入するという望ましい結果が得られます。(それが理にかなっていることを願っていますか?)

于 2012-11-08T14:57:24.750 に答える
0

sed があなたia. 結果を 2 番目の sed にパイプするか、GNU sed を使用している場合は、次のようにすることができます。

sed '/xxx/ s//cat file_to_insert | head -c-1; echo " &"/e' infile

挿入したいものが にあると仮定しますinfile。置換へのeフラグは、パターン スペース内のテキストを で実行し/bin/sh、その結果がコマンドを置き換えます。入力のサイズと/bin/shリンク先によっては、これは非効率的である可能性があります。

sed を 2 回呼び出す方法の 1 つを次に示します。

<infile sed '/xxx/i\inserting this line and' | sed 'N; /\nxxx/! {P; D}; s/\n/ /'
于 2012-11-08T07:43:27.500 に答える