数字で始まる各列の先頭に文字を追加するには:
追加例c
:
4 r4 8 8 4
だから私は次のような結果を得ます:
c4 r4 c8 c8 c4
さまざまな数の列に対して機能する必要があります。
答え1
あなたはそれを使用することができますsed各列を一度に変更します。
sed -E 's/(^| )([[:digit:]])/\1c\2/g' input
フィールド区切り文字が空白でない場合は、(^| )
正規表現のこの部分のスペースをフィールド区切り文字に置き換えます。
-E
デフォルトの正規表現(BRE)の代わりに拡張正規表現(ERE)を使用するように指定します。s
:s/regexp/replacement/
(^| )
キャプチャリンググループの行の先頭またはスペースに一致します。([[:digit:]])
キャプチャグループの数値一致\1c\2
最初のキャプチャグループの内容(\1
)、文字c
、2番目のキャプチャグループの内容(\2
)g
グローバル
結果が満足で実装がサポートされている場合は、FreeBSDやmacosなどの派生に追加してファイルを変更sed
できます。 (元のファイルをバックアップしたい場合)-i
-i ''
-i.bak
答え2
私は次のように-onelinerを使用しますawk
:
echo '4 r4 8 8 4' | awk '{ for (i=1; i<=NF; i++) if ($i ~ /^[0-9]/) $i = "c" $i }1'
役に立ったことを願っています:)
答え3
使用幸せ(以前のPerl_6)
~$ raku -pe 's:g / <(^ | \s+)> \d /{$/}c/;' file
#OR
~$ raku -pe 's:g / (^ | \s+) (\d) /$0c$1/;' file
以下は、Perlシリーズのプログラミング言語であるRakuで書いた答えです。上記では、ファイルは1行ずつ自動印刷フラグを使用して読み取られます-pe
。交換は:g
グローバルで、次のとおりです。 」行の先頭^
または\s+
スペースの後に\d
数字が続く場合は、それを置き換えます。 」
<(…)>
最初の例では、Rakuのキャプチャタグを使用して、スペースの後ろの一致を削除しました。結果$/
一致オブジェクトが代替出力され、その後に文字が表示されますc
。 2番目の例では、一致はすべて2つのキャプチャ($0
および$1
)に含まれ、置換として出力されます$0c$1
。
入力例:
4 r4 8 8 4
出力例:
c4 r4 c8 c8 c4
または(より明示的に)以下は、列間のスペースを「正規化」します。
~$ raku -ne 'put .split(/ \s+ /).map: *.subst(/^ \d /, {"c$/" // ""});' file
#OR
~$ raku -ne 'put .split(/ \s+ /).map: *.subst(/^ (\d) /, {"c$0" // ""});' file
まず、入力行が.split
変数スペース()にあり、各列がaで始まる列に入力\s+
され、aが一致の前に追加されます(ここではmatch-objectまたはを使用して)。一致が定義されていない場合(Rakuの「define-OR」演算子を使用)、何も挿入されません。返された列の間にスペースがあります。map
subst
^
\d
c
$/
$0
//
""
答え4
echo "4 r4 8 8 4" | sed -E 's/\<([[:digit:]])/c\1/g'