2

例:

  sed 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' abc.txt

's @'、'('、'\?'、'&'、'@'などの意味は何ですか?

sedを学ぶための適切で最も簡単な方法を見つける方法は?

abc.txt:

  #define GNU_USER_LINK_EMULATION32 "elf32%{EB:b}%{EL:l}tsmip"
  #define GNU_USER_LINK_EMULATION64 "elf64%{EB:b}%{EL:l}tsmip"
  #define GNU_USER_LINK_EMULATIONN32 "elf32%{EB:b}%{EL:l}tsmipn32"

  #define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
  #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld.so.1"
  #define GLIBC_DYNAMIC_LINKERN32 "/lib32/ld.so.1"
  #define UCLIBC_DYNAMIC_LINKERN32 "/lib32/ld-uClibc.so.0"
  #define BIONIC_DYNAMIC_LINKERN32 "/system/bin/linker32"
  #define GNU_USER_DYNAMIC_LINKERN32 \
    CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32, \
               BIONIC_DYNAMIC_LINKERN32)    

ありがとう〜

4

2 に答える 2

6

マニュアルはhttp://www.gnu.org/software/sed/manual/sed.htmlから始めるのに適しています。

その特定のコマンドを分解します。

sed 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' abc.txt

引用符で囲まれた文字列's@/lib\(64\)\?\(32\)\?/ld@/tools&@g'は、実行する sed の単一引数コマンドです。この場合は 's' ('substitute') コマンドですhttp://www.gnu.org/software/sed/manual/sed.html#The --0022s_0022-コマンド

そこで使用されるセパレーターは @ 記号であるため、正規表現は/lib\(64\)\?\(32\)\?/ldであり、置換は/tools&です。最後に 'g' オプションがあり、最初の行だけでなく、各行内のすべての一致に適用されます。

正規表現の場合、キャプチャ グループ\(\)区切ると\?は、「オプションで前のアトムに一致する (0 回または 1 回一致する)」ことを意味します (前のアトムはそのグループです)。残りの文字はそのまま一致するため/lib/ld、 、/lib64/ld/lib32/ldまたは/lib6432/ld.

置換では、&には一致全体が含まれるため、事実上、すべての一致の前に/tools.

于 2013-01-20T05:42:22.827 に答える
2

sed や awk を学習する前に、まず REGEX を学習する必要があります。それらはほとんど正規表現ベースです。ここからスタート

次に、ここから sed を開始できますhttp://www.grymoire.com/Unix/Sed.html

最善の方法は、実践によって学ぶことです。正規表現を学習した後、SO からの sed の質問を見て、人々がどのように答えているかを確認します。最初に自分で解決してから、与えられた答えを見てください

于 2013-01-20T05:38:47.537 に答える