AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1286294
Accepted
Insideup
Insideup
Asked: 2020-10-24 06:49:49 +0800 CST2020-10-24 06:49:49 +0800 CST 2020-10-24 06:49:49 +0800 CST

如何为文件的每一行添加交互值?

  • 772
Numlines=$(grep "" -c file.txt) # This works
for line in $( seq 1 $Numlines) # for each line 
do
sed "s/$/ Line${i}/" file.txt # not right
done

文件.txt:

this is the first line
this is the second line
this is the third line

期望的输出

this is the first line  Line1
this is the second line  Line2
this is the third line  Line3

相反,我得到:

this is the first line Line1
this is the second line Line1
this is the third line Line1
this is the first line Line2
this is the second line Line2
this is the third line Line2
this is the first line Line3
this is the second line Line3
this is the third line Line3
command-line bash sed
  • 1 1 个回答
  • 43 Views

1 个回答

  • Voted
  1. Best Answer
    steeldriver
    2020-10-24T07:11:38+08:002020-10-24T07:11:38+08:00

    您的循环将处理整个文件Numlines时间,无论如何都将后缀添加到每一行。此外,您的循环变量是在 sed 命令中$line使用$i的,并且在大多数 shell 中,您的分配在Numlines语法上是不正确的。

    你可以做

    Numlines=$(wc -l < file.txt)
    for i in $(seq 1 "$Numlines"); do sed -n "${i}s/$/ Line${i}/p" file.txt; done
    

    请注意,作业喜欢Numlines=$(wc -l < file.txt)或您原来的

    Numlines = $(grep "" -c file.txt) # This works
    

    (它可能没有)在=in bash 和类似的 shell 周围不能有空格。

    然而,使用 shell 循环以这种方式处理文件效率低下 - 恕我直言,在 awk 中使用类似以下内容会更好:

    awk '{$(NF+1) = "Line" FNR} 1' file.txt
    

    或在 perl 中或多或少等效:

    perl -lpe '$_ .= " Line $."' file.txt
    

    如果 sed 是您唯一可用的工具,那么您可以使用它两次 - 一次使用=命令对行编号,然后第二次格式化结果:

    sed = file.txt | sed '$!N;s/\(.*\)\n\(.*\)/\2 Line\1/'
    
    • 3

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve