![sed を使用して 2 文字間の文字列を抽出する方法 [duplicate]](https://linux33.com/image/71378/sed%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%202%20%E6%96%87%E5%AD%97%E9%96%93%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%20%5Bduplicate%5D.png)
私は助けが必要です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'