Unix sed コマンドはファイルの角かっこを置き換えます。

Unix sed コマンドはファイルの角かっこを置き換えます。

ファイルで置き換える必要があります"..."<...>このコマンドを使用してsed '/^#include/s/"/</g' file.c見つかりました。ここしかし、出力が正しくありません。この問題をどのように解決できますか?

入力する:

#include "stdlib.h"
#include "graph.h"

出力:

#include <stdlib.h<
#include <graph.h<

予想出力:

#include <stdlib.h>
#include <graph.h>

ベストアンサー1

このコマンドの問題はg最後にあります。続くみんな<一致する二重引用符は各行で置き換えられます^#include。あなたがリンクしているStackOverflowの質問は、必要に応じて他の方法ではなく<>(使用するか、""問題の行でそれほどy/<>/""/効率的に実行できない)に置き換えることに関連していることに注意してください。s/[<>]/"/g

s/"/</(no g)を最初に使用してからs/"/>(ここでもない)を使用してもgかまいません。

sed '/^#include/ { s/"/</; s/"/>/; }' file.c >file-new.c

最初の置換は最初の二重引用符を置き換え、2番目の置換は現在変更されている文字列の最初の二重引用符を置き換えます。

ファイルを変更するには(内部編集を行ったと仮定する)、行末を<次に置き換えます>

sed '/^#include/ s/<$/>/' file.c >file-new.c

これは<$<行末のan)と一致し、に置き換えられます>

結果を見て問題ない場合はfile-new.c交換してください。file.c

おすすめ記事