【问题标题】:Searching and selecting strings from a file从文件中搜索和选择字符串
【发布时间】:2017-08-17 21:29:31
【问题描述】:

我很难用字符串分隔几个精确的“字段”,然后将它们放入 .txt 文件中。我需要从 /etc/passwd 文件中提取“nologin”用户,这是一个简单的步骤。我正在使用这个命令:

grep -n 'nologin' /etc/passwd > file1.txt

cat 命令给了我例如:

2:daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
3:bin:x:2:2:bin:/bin:/usr/sbin/nologin
4:sys:x:3:3:sys:/dev:/usr/sbin/nologin

并保存到file1.txt

现在我必须从 file1.txt 中提取一个数字(2、3、4)、登录(守护进程、bin、sys)UID 和 shell。它应该是这样的

2:daemon:1:/usr/sbin/nologin
3:bin:2:/usr/sbin/nologin
4:sys:3:/usr/sbin/nologin

我还必须将该输出保存到 *.txt 文件中。 我怎样才能做到这一点?

【问题讨论】:

    标签: linux shell terminal grep debian


    【解决方案1】:

    您可以像这样使用cut 命令:

    cut -d':' -f1 file1.txt > file2.txt
    

    根据man page

    -d, --delimiter=DELIM

    使用 DELIM 代替 TAB 作为字段分隔符

    -f, --fields=LIST

    只选择这些字段;还打印任何不包含分隔符的行,除非指定了 -s 选项

    【讨论】:

    • 这解决了我的问题!非常感谢您的帮助:)
    【解决方案2】:

    我认为您可以使用 awk 来获取您的特定字段 1-转到您的终端并确保您知道您的文件路径 2- 使用awk命令,其中-F用来表示分隔符,$用来表示字段编号

    您的 file1.txt 包含:

    2:daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin 3:bin:x:2:2:bin:/bin:/usr/sbin/nologin 4:sys:x:3:3:sys:/dev:/usr/sbin/nologin

    在终端中通过 file1 使用 awk 命令

    awk -F '[:/]' '{print $1 " " $2 " " $4 " " " " $(NF-2) " " $(NF-1) " "      $NF}' file1.txt
    

    确保你的文件路径正确

    $1 or $2 = the number of field or column
    

    $NF = 最后一列 $(NF-1) = 最后一列之前的列 等等 " " = 平均空间

    您的输出将是:

    2 守护进程 1 usr sbin nologin 3 bin 2 usr sbin nologin 4 sys 3 usr sbin nologin

    您可以在 awk 命令中添加分隔符而不是空格

    例如,

    awk -F '[:/]' '{print $1 ":" $2 ":" $4 ":/" $(NF-2) "/" $(NF-1) "/" $NF}' file1.txt
    

    输出:

    output

    谢谢,祝你有美好的一天

    【讨论】:

      【解决方案3】:
      awk -F: '{print $1,$2,$4,$NF}' OFS=: file1.txt > newfile.txt
      
      2:daemon:1:/usr/sbin/nologin
      3:bin:2:/usr/sbin/nologin
      4:sys:3:/usr/sbin/nologin
      

      【讨论】:

        猜你喜欢
        • 2012-09-09
        • 1970-01-01
        • 1970-01-01
        • 2017-01-06
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多