linux - 如何修改文本的每一行?

标签 linux bash

我有一个如下所示的文件(可以有超过 2 行):

$ cat /tmp/temp.txt 
;user1;1.1.1.1;DB1;SELECT;
;userX;2.2.2.2;DB4;SELECT;

我想这样改变它:

user: user1 address: 1.1.1.1 db: DB1 right: SELECT
user: userX address: 2.2.2.2 db: DB4 right: SELECT

我认为最简单的方法是使用 read 函数:

!/bin/bash

filename='/tmp/temp.txt'
while read ; do
  user=$(cut -d";" -f2 /tmp/temp.txt)
  address=$(cut -d";" -f3 /tmp/temp.txt)
  database=$(cut -d";" -f4 /tmp/temp.txt)
  right=$(cut -d";" -f5 /tmp/temp.txt)

 echo "user:$user address:$address database:$database right:$right"

done < $filename

脚本的输出是:

user:user1
userX address:1.1.1.1
2.2.2.2 database:DB1
DB4 right: SELECT
SELECT
user:user1
userX address:1.1.1.1
2.2.2.2 database:DB1
DB4 right: SELECT
SELECT

我希望输出中的行数与输入文件中的行数相同。

最佳答案

只需使用awk:

$ awk -F ';' '{ print "user:", $2, "address:", $3, "db:", $4, "right:", $5 }' your_file

这会用分号分割文件的每一行,然后以所需的输出格式打印出所需的列。

关于linux - 如何修改文本的每一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920999/

相关文章:

c++ - 如何在C++中调用Web服务方法?

bash - 删除 bash 提示符中的连字符

bash - 通过 ssh 执行命令,然后运行 ​​bash

linux - 如何检查文件的查找命令列表,如果没有文件则退出

android - Android 和 Linux 之间的 NFC P2P 通信入门 (libnfc)

linux - VIM : How to copy all lines having a substring to another file/buffer?

java - KeyEvent.VK_CONTEXT_MENU 在 Linux 上由 Robot 发送时不起作用

linux - GNU Octave,将数字四舍五入到单位精度

for循环数语法上限的bash变量

bash - awk 如果第 n 列值乘以 X 大于 Y