在BASH脚本中解析文本中的行

时间:2016-05-27 04:07:25

标签: bash parsing

您好,提前抱歉,因为我对unix / linux / scripting还不熟悉。

我有一个txt文件,其中包含20行左右的用户名:hashedpassword:numericalfield:numericalfield :::,类似于以下内容:

#paswd.txt
jgarcia:9bca3efc64b290e9ad3fa3e0add3c983:22288:0:99999:7:::
tanastsio:924e509403341760676d4f1368c87f8d:28593:0:99999:7:::
dbyrne:328fe8a2642fa5bfd1bfdfd894367e79:0:99999:7:::

我需要能够输出一行或多行的特定部分(例如,只是用户名,只是散列密码等),这样我就可以将输出用于其他用途(比较,变量,其他命令)。 )

我需要做什么:

input:  $ [necessary command -params] ./paswd.txt
output: $ jgarcia

input:  $ [necessary command -params] ./pswd.txt
output: $ 9bca3efc64b290e9ad3fa3e0add3c983

input:  $ [necessary command -params] ./pswd.txt
output: $ jgarcia
          tanastsio
          dbyrne

如果可能的话加分:

input:  $ [necessary command + params] ./paswd.txt
output: $ dbyrne 328fe8a2642fa5bfd1bfdfd894367e79 (no colons)

澄清一些用途:

  • 命令输出最终将用于确定散列密码是否与用户名完全相同。
  • 命令输出最终将用于确定用户的密码是否为"密码"等。

此外,有人可以告诉我,这个问题的正确方法是什么?解析?或其他什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

对于您想要的输出,这些命令将起作用:

:上拆分后,从第一行打印第一个字段:

awk -F ":" '{if (NR==1) { print $1 } }' paswd.txt
  

jgarcia

:上拆分后,从第一行开始打印第二个字段:

awk -F ":" '{if (NR==1) { print $2 } }' paswd.txt
  

9bca3efc64b290e9ad3fa3e0add3c983

在所有行上:分割后打印第一个字段:

awk -F ":" '{ print $1 }' paswd.txt
  

jgarcia

     

tanastsio

     

dbyrne

在第一行:上拆分后打印第一个和第二个字段:

awk -F ":" '{if (NR==1) { print $1" "$2 } }' paswd.txt
  

jgarcia 9bca3efc64b290e9ad3fa3e0add3c983

希望这有帮助