sed を使用して 2 文字間の文字列を抽出する方法 [duplicate]

sed を使用して 2 文字間の文字列を抽出する方法 [duplicate]

私は助けが必要ですsed。このために情報を探しましたが、具体的な内容が見つかりませんsedでした。

デフォルトでは、次の形式のファイルがあります。

NAME_DIGITS_ddd-11s-21a-ds_DIGITS_DIGITS.xml

00004574最初の下線と2番目の下線の間の文字列である最初の数字(たとえば)をコピーしたいと思います。

これを行う方法を知っていますか?

最初の数字を考えると、0それを取り除くために何ができますか?

2つの状況の例を挙げていただければ幸いです。説明も大歓迎です。

私は反対の目標を達成しました。最初の下線と2番目の下線の間の文字を削除しましたが、sed s/_[^_]*_/_/実際に必要な操作を実行する方法を知りませんでした。

答え1

 awk -F "_" '{print $2}'

それだけです!

また、本当にsedを使用したい場合

sed 's/^[^_]*_\([^_]*\)_.*/\1/g'

sedには貪欲ではない一致がないため、_最初の下線と2番目の下線の間にない項目を検索する必要があります!

答え2

次の形式のファイルがあり、NAME_DIGITS_ddd-11s-21a-ds_DIGITS_DIGITS.xml下線の間の最初の数字をコピー(抽出?)したいと書きました。

セクションは下線で明確に区切られているので、次のように使用できます。

echo NAME_DIGITS_ddd-11s-21a-ds_DIGITS_DIGITS.xml | cut -d_ -f2

このコマンドは、下線を指定された区切り文字()として使用してcutフィールド2()を抽出します。-f2-d_

答え3

必要なコマンドは次のとおりです。

sed -ne 's/^[^0-9_][^_]*_0*\([0-9]*\)_.*/\1/p'

前にゼロを表示するには、0 *を削除してください。

答え4

その他sed

sed '/\n/!{s/_0*/\n/g;D;};P;d'

または

sed 's/_0*/\n/;/^[0-9]/!D;P;d'

関連情報