linux shell 用sed命令在文本的行尾或行首添加字符

linux shell 用sed命令在文本的行尾或行首添加字符,第1张

最后还是想用简单的脚本解决,发现使用 sed 命令可以方便得在文件每一行后添加一个字符。首先看一下 sed 命令。

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间” (pattern space) ,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。 Sed 主要用来自动编辑一个或多个文件;简化对文件的反复 *** 作;编写转换程序等。

假设处理的文本为 test.file ,在每行的头添加字符,比如 HEAD ,命令如下:

在每行的行尾添加字符,比如 TAIL ,命令如下:

几点说明:

这样就处理完了!总之恰当使用sed命令是可以避免来回打开文件造成的时间浪费,可以使用sed命令在linux脚本中做一些更好玩的事情。希望这篇文章可以给你一些帮助~

无论你面试的是什么岗位,应该都或多或少看到过这个问题 - 两个长整数相加要怎么实现。如果a和b的位数不大,确实直接用类型转换就可以求出a+b了,但是万一a和b的位数都是几百位呢,早就溢出了,这时候要怎么计算呢?

这种情况下,有三种解决方法可供选择:

一、 用字符串来存储a和b的值;

二、 用数组来存储a和b的值;

三、 用链表来存储a和b的值。

这三种方法都有一个共同点,就是无论哪一种方法,都可以不用担心因为数字太大而造成数值溢出出错。而它们的解决思路也都大同小异,下面我们来分析解决思路。

做这种题的时候,我有一个惯性思维,就是用我们现实中的解题思路来教给计算机,让它也用这种方法来解决。回忆一下我们小学的时候,老师是不是教我们做加法的时候,要从最后一位开始加,遇到十的时候就要进行进位,直至两个数都加完。在编程中,我们也可以用这个思路来进行做题:

先找到a和b的最后一位,将这两个一位数相加并假设它存在tmp中,如果tmp大于9,那么就说明需要进位了,这时候加入一个标识表示是否需要进位,比如说我们拿addOne作为标识,那么这时候我们就需要将addOne置为1,然后tmp对10进行取模,就可以得到当前位置上的实际数值了,再对a和b的倒数第二位进行重复的 *** 作...直至将a和b遍历完就结束。下面这段代码是用第二种方法来解决的,大家可以参考一下:

1 //方法二:将数字转化为数组再进行相加

2 functionadd(num1, num2){3 //将num1和num2转为数组,每格存储一位,比如num1 = “12345”,转成数组a之后就变成["1", "2", "3", "4", "5"]

4 let a = String.prototype.split.call(num1, "")5 let b = String.prototype.split.call(num2, "")6 //用来存储结果

7 let res =[]8 let addOne = 0//用于判断是否需要金威

9 //当a和b其中一个不为空时,各取出最后一位数字并相加,如果其中一个先为空了,则将它置为0

10 while(a.length ||b.length){11 let item1 = parseInt(a.pop()) | 012 let item2 = parseInt(b.pop()) | 013 let tmp = item1 + item2 +addOne14 if(tmp >9){15 addOne = 116 tmp %= 1017 }else{18 addOne = 019 }20 //unshift是js中的一个 *** 作方法,array.unshift(item)表示在数组array的最前面插入item

21 res.unshift(tmp)22 }23 //当a和b都全部加完了之后,再最后一次判断是否需要进位

24 if(addOne) res.unshift(1)25 //最后利用join把数组转成字符串并返回

26 return res.join('')27 }

其他两种方法做起来也都大同小异,思路是一样的,只不过是实际 *** 作起来的方法会有所不同,大家可以自己探索一下。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/bake/11728003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存