行を2つの列に分割したい
./ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****
上の行のコロン(:)が区切り文字として機能し、次のように出力されるようにします。
./ABC/dce/app/config/fgh/pqr/app.properties app.pass
誰でも私を助けることができますか?
答え1
あなたはそれを使用することができますawk
awk -F"[:=]" '{print $1"\t"$2}' $file
2つの区切り文字を設定して、FS
それ以降のすべての項目を=
列にして除外できます。
また、使用することができますsed
sed -E 's/(^.*):(.*)=.*/\1\t\2/'
出力*
./ABC/dce/app/config/fgh/pqr/app.properties app.pass
答え2
あなたは試すことができます:
echo "./ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****" | tr ':' '\t'
答え3
また、awk
次の可能性を使用してください。
echo './ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****' | awk 'sub(/=[^=]*$/,""){sub(/:/,"\t")} 1'
./ABC/dce/app/config/fgh/pqr/app.properties app.pass
sub()
置換が成功した場合は1を返し、それ以外の場合は0を返します。- 条件:最初の
sub()
機能。代替案はありますか?その場合は、2番目のsub()
機能を実行します。 - 最初
sub()
:sub(/=[^=]*$/,"")
削除から=
最後まで。 - 2番目
sub()
:タブsub(/:/,"\t")
の交換:
\t
答え4
使用幸せ(以前のPerl_6)
コロンを1つだけ分割したい場合:
:
raku -ne '.split(":").join("\t").put;'
ただし、2番目の要素(索引= 1)をクリーンアップするには、次のようにします。
raku -ne '.=split(":"); put( .[0] ~ "\t" ~ .[1].subst(/ \=.* /));'
入力例:
./ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****
出力例(1):
./ABC/dce/app/config/fgh/pqr/app.properties app.pass=*****
出力例(2):
./ABC/dce/app/config/fgh/pqr/app.properties app.pass
簡単に言えば、このsplit
手順は:
大腸を破壊的に分割して除去することです。最初の例では、結果の文字列はタブ文字を使用して再結合されます\t
。 2番目の例では、結果の文字列は実際には割り当て$_
演算子を使用してトピック変数に再保存されるため、.=
2番目の操作(.=
例、短縮型$_.=
)を実行できます。 2番目の操作は正規表現を何もsubst
変更しません(つまり削除します)。\=.*
Rakuの文字列連結は、~
チルダ文字で行われます。上記のコードは要求された操作を実行します。ただし、列間の間隔を変更するには、同様の文字列連結を使用してみることができます~ "\t" xx 4 ~
(たとえば、\t
タブ文字が4回繰り返されます)。