在每行开头添加前缀字符串

2024-10-10 08:38:00
admin
原创
93
摘要:问题描述:我有如下文件:line1 line2 line3 我想要得到:prefixline1 prefixline2 prefixline3 我可以编写一个 Ruby 脚本,但如果不需要就更好了。prefix将包含。例如/,它是一条路径。/opt/workdir/解决方案 1:# If you want t...

问题描述:

我有如下文件:

line1
line2
line3

我想要得到:

prefixline1
prefixline2
prefixline3

我可以编写一个 Ruby 脚本,但如果不需要就更好了。

prefix将包含。例如/,它是一条路径。/opt/workdir/


解决方案 1:

# If you want to edit the file in-place
sed -i -e 's/^/prefix/' file

# If you want to create a new file
sed -e 's/^/prefix/' file > file.new

如果prefix包含/,则可以使用不在的任何其他字符prefix,或者转义/,因此sed命令变为

's#^#/opt/workdir#'
# or
's/^//opt/workdir/'

解决方案 2:

awk '$0="prefix"$0' file > new_file

在 awk 中默认操作是'{print $0}'(即打印整行),因此上述操作等同于:

awk '{print "prefix"$0}' file > new_file

使用 Perl(就地替换):

perl -pi 's/^/prefix/' file

解决方案 3:

你可以在 Ex 模式下使用 Vim:

ex -sc '%s/^/prefix/|x' file
  1. %选择所有行

  2. s代替

  3. x保存并关闭

解决方案 4:

如果你的前缀有点复杂,只需将其放在变量中:

prefix=path/to/file/

然后,传递该变量并让 awk 处理它:

awk -v prefix="$prefix" '{print prefix $0}' input_file.txt

解决方案 5:

ts以下是使用moreutils 命令的单行解决方案

$ cat file | ts prefix

以及它是如何一步步推导出来的:

# Step 1. create the file

$ cat file
line1
line2
line3
# Step 2. add prefix to the beginning of each line

$ cat file | ts prefix
prefix line1
prefix line2
prefix line3

请注意,前缀将与内容用空格分隔

解决方案 6:

如果你有 Perl:

perl -pe 's/^/PREFIX/' input.file

解决方案 7:

使用 &(与模式匹配的整个输入部分”):

cat in.txt | sed -e "s/.*/prefix&/" > out.txt

或者使用反向引用:

cat in.txt | sed -e "s/(.*)/prefix/" > out.txt

解决方案 8:

使用 shell:

#!/bin/bash
prefix="something"
file="file"
while read -r line
do
 echo "${prefix}$line"
done <$file > newfile
mv newfile $file

解决方案 9:

虽然我认为 pierr 没有这方面的担忧,但我需要一个不会延迟文件实时“尾部”输出的解决方案,因为我想同时监控多个警报日志,并在每行前面加上各自日志的名称。

不幸的是,sed、cut 等引入了太多缓冲,使我无法看到最新的行。Steven Penny 建议使用选项-snl这很有意思,而且测试证明它没有引入我担心的不必要的缓冲。

不过,使用 时存在一些问题nl,这些问题与删除不需要的行号的愿望有关(即使您不关心它的美观性,在某些情况下使用额外的列也是不理想的)。首先,使用“cut”删除数字会再次引发缓冲问题,因此会破坏解决方案。其次,使用“-w1”没有帮助,因为这不会将行号限制为单个列 - 它只会随着需要更多数字而变得更宽。

如果您想在其他地方捕获此信息,那就不太好,但由于这正是我不需要做的(所有内容都已写入日志文件,我只想实时查看几个文件),因此丢失行号并只保留前缀的最佳方法是以-s回车符(CR 或 ^M 或 Ctrl-M)开始字符串。例如:

#!/bin/ksh

# Monitor the widget, framas, and dweezil
# log files until the operator hits <enter>
# to end monitoring.

PGRP=$$

for LOGFILE in widget framas dweezil
do
(
    tail -f $LOGFILE 2>&1 |
    nl -s"^M${LOGFILE}>  "
) &
sleep 1
done

read KILLEM

kill -- -${PGRP}

解决方案 10:

使用 ed:

ed infile <<'EOE'
,s/^/prefix/
wq
EOE

对于每一行 ( ),用 替换,行的开头 ( ^) prefixwq保存并退出。

如果替换字符串包含斜杠,我们可以使用不同的分隔符来s代替:

ed infile <<'EOE'
,s#^#/opt/workdir/#
wq
EOE

我已将此处文档分隔符(“ed 结束”)括起来以防止参数扩展。在此示例中,不带引号也可以正常工作,但如果您的 ed 脚本中EOE有一个,则最好避免出现意外。$

解决方案 11:

下面是使用此答案sed中的方法总结的示例:

$ cat /path/to/some/file | prefix_lines "WOW: "

WOW: some text
WOW: another line
WOW: more text

前缀行

function show_help()
{
  IT=$(CAT <<EOF
    Usage: PREFIX {FILE}

    e.g.

    cat /path/to/file | prefix_lines "WOW: "

      WOW: some text
      WOW: another line
      WOW: more text
  )
  echo "$IT"
  exit
}

# Require a prefix
if [ -z "$1" ]
then
  show_help
fi

# Check if input is from stdin or a file
FILE=$2
if [ -z "$2" ]
then
  # If no stdin exists
  if [ -t 0 ]; then
    show_help
  fi
  FILE=/dev/stdin
fi

# Now prefix the output
PREFIX=$1
sed -e "s/^/$PREFIX/" $FILE

解决方案 12:

  1. 您还可以使用反向引用技术来实现这一点

sed -i.bak 's/(.*)/prefix/' foo.txt
  1. 您还可以像这样使用 awk

awk '{print "prefix"$0}' foo.txt > tmp && mv tmp foo.txt

解决方案 13:

你可以使用AWK来实现

echo example| awk '{print "prefix"$0}'

或者

awk '{print "prefix"$0}' file.txt > output.txt

对于后缀:awk '{print $0"suffix"}'

对于前缀和后缀:awk '{print "prefix"$0"suffix"}'

解决方案 14:

使用Pythonize ( pz):

pz '"preix"+s' <filename

解决方案 15:

在 bash 命令行上使用 for 循环的简单解决方案:

for i in $(cat yourfile.txt); do echo "prefix$i"; done

将输出保存到文件:

for i in $(cat yourfile.txt); do echo "prefix$i"; done > yourfilewithprefixes.txt

解决方案 16:

对于使用 BSD/OSX 系统的用户,有一个名为的实用程序lam,是 Laminate 的缩写。lam -s prefix file它将执行您想要的操作。我在管道中使用它,例如:

find -type f -exec lam -s "{}: " "{}" ; | fzf

...它将找到所有文件,对每个文件执行 lam,并为每个文件赋予其自己的文件名前缀。 (并将输出泵送到 fzf 进行搜索。)

解决方案 17:

如果您需要在包含特定字符串的每一行开头添加文本,请尝试以下操作。在下面的示例中,我在包含单词“rock”的每一行开头添加 #。

sed -i -e 's/^.*rock.*/#&/' file_name

解决方案 18:

另一种选择(sponge可选):

$ cat file | xargs -I{} echo 'prefix-{}-suffix' | sponge file

例子:

$ seq 1 10 | xargs -I{} echo 'prefix-{}-suffix'
prefix-1-suffix
prefix-2-suffix
prefix-3-suffix
prefix-4-suffix
prefix-5-suffix
prefix-6-suffix
prefix-7-suffix
prefix-8-suffix
prefix-9-suffix
prefix-10-suffix

解决方案 19:

SETLOCAL ENABLEDELAYEDEXPANSION

YourPrefix=blabla

YourPath=C:path

for /f "tokens=*" %%a in (!YourPath!longfile.csv)     do (echo !YourPrefix!%%a) >> !YourPath!Archiveoutput.csv
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用