将文件中的一行分成两列

将文件中的一行分成两列

我想将一行分成两列

./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()函数。有替代品吗?如果是,则执行该操作,即第二个sub()函数。
  • 第一个sub()sub(/=[^=]*$/,"")从 删除=到最后。
  • 第二sub()sub(/:/,"\t")替换:选项卡\t

答案4

使用(以前称为 Perl_6)

如果您只想分割一个:冒号:

raku -ne '.split(":").join("\t").put;'

但是,如果您想清理第二个元素(索引=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。在第二个示例中,结果字符串实际上$_使用赋值运算符保存回主题变量中.=,因此可以执行第二个操作(.=是 的简写$_.=)。第二个操作将正则表达式subst替换\=.*为空(即删除它)。

请注意,Raku 中的字符串连接是通过~波形符完成的。上面的代码完成了所请求的任务——但是,如果您想更改列之间的间距,您可以尝试使用类似的字符串连接~ "\t" xx 4 ~(即\t制表符重复 4 次)。

https://raku.org

相关内容