ファイル内で、一致させようとしているパターンを見つけました。それを見つけたら、上に行を挿入しますが、パターンスペースを取得して、挿入しようとしている行に追加することができないようです。そのようです:
/xxx/ i\inserting this line and &
「&」がsの場合と同じようにパターンスペースを印刷することを期待しています
よろしく、事前に感謝しますクレイ
ファイル内で、一致させようとしているパターンを見つけました。それを見つけたら、上に行を挿入しますが、パターンスペースを取得して、挿入しようとしている行に追加することができないようです。そのようです:
/xxx/ i\inserting this line and &
「&」がsの場合と同じようにパターンスペースを印刷することを期待しています
よろしく、事前に感謝しますクレイ
これはうまくいくかもしれません(GNU sed):
sed -er '/.*(xxx).*/s//inserting this line and \1\n&/' file
コメントを参照して:
sed '/public String getFirstName()/s/.*\("[^"]*"\).*/@XmlElement(name=\1)\n&/' file
私も自分で解決策に取り組んできました。この同様のシナリオでは、パブリッククラスラインがあります
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 {
したがって、最終的には、自分の行の上にその行のコンテンツを含む行を挿入するという望ましい結果が得られます。(それが理にかなっていることを願っていますか?)
sed があなたi
やa
. 結果を 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/ /'