Linux下使用xargs将多行文本转换成一行并用tr实现逗号隔开

本文介绍如何使用xargs、tr及sed命令将文件内容进行转换,包括去除换行符并用特定字符连接各部分,着重展示了如何利用这些命令解决实际问题。

准备:

cat test.txt
1
3
4

示例:

cat test.txt | xargs
1 3 4

可以看出得到的字符串为空格隔开的。

再把上面的字符串用逗号隔开,可以使用tr命令进行空格的替换

cat test.txt | xargs | tr ' ' ','

不过tr命令只能替换单个字符,多个字符无法实现。

使用sed实现多个字符串的替换:

cat test.txt | xargs | sed /s/ /','/g

sed可以替换多个字符串,可以弥补tr的不足,后面g表示匹配多个。

 

总结:

替换和合并命令有很多,主要是看你怎么去解这道题,这里主要是基于xargs和tr实现的,当然,还可以使用sed命令去替换,sed命令支持多个字符串。

 

参考:

http://man.linuxde.net/xargs(xargs用法)

http://man.linuxde.net/tr(tr用法)

http://man.linuxde.net/sed(sed用法)

http://bbs.chinaunix.net/thread-1631249-1-1.html

转载于:https://www.cnblogs.com/EasonJim/p/8319999.html

<think>嗯,用户想要用Shell命令把多行文件合一行,每项用单引号括起来并用逗号分隔。首先我得想想有哪些工具可以实现这个需求。记得常用的文本处理工具有sed、awk、tr、paste,还有xargs。 首先,xargs可能是个选项,因为它可以把输入转换成命令行参数。比如用xargs上-I{},然后用单引号包裹。不过可能需要注意换行符的处理。比如: cat file.txt | xargs -I{} echo "'{}'" | paste -sd, - 这样应该能把每一行上单引号,然后用逗号连接。不过得确认xargs是否能正确处理多行输入。根据引用[2],xargs会把换行和空格替换为空格,但这里用-I{}应该能逐行处理,对吗? 另外,sed也可以处理。但是sed默认处理每行时会去掉换行符,处理完再上。所以直接替换换行符可能会麻烦。根据引用[3],sed无法直接替换换行符,所以可能需要先通过其他方式把换行符转换成其他字符,再用sed处理。比如用tr '\n' ','替换换行符为逗号,但这样末尾会多一个逗号,需要用sed去掉,再包裹整个结果在单引号里。不过这样每行的内容不会被单独引号包裹,可能不符合需求。 或者,用sed在每行的开始单引号,结尾单引号和逗号,最后处理末尾的逗号。例如: sed "s/^/'/;s/$/'/" file.txt | paste -sd, | sed 's/,$//' 这样每行都被单引号包裹,然后用paste合一行逗号分隔。这个方法可能可行。 还有awk的方法,可以逐行处理,添单引号,在行末逗号,最后处理最后一个逗号。比如: awk '{print "'\''" $0 "'\''"}' file.txt | paste -sd, - 或者: awk '{printf "%s'',''", $0}' file.txt | sed 's/,$//' | sed "s/^/'/;s/$/'/" 不过这样可能比较复杂,需要处理引号的转义。 再考虑paste命令,它本身可以用-d指定分隔符,所以可能结合sed来添单引号。例如: sed "s/.*/'&'/" file.txt | paste -sd, - 这个应该更简洁,s/.*/'&'/会将每行内容替换为用单引号包裹,然后paste用逗号连接所有行。 然后测试这些方法,比如用测试文件: line1 line2 line3 预期输出应该是:'line1','line2','line3' 用sedpaste的方法应该可以。比如: sed "s/^/'/;s/$/'/" file.txt | paste -sd, - 这样每行的前后上单引号,然后paste合一行,用逗号分隔。结果就是'line1','line2','line3',正确。 另一个方法是使用tr替换换行符为指定格式,但可能不如sed和paste组合方便。或者用awk的循环处理,但可能更复杂。 总结下来,最简洁的方法可能是用sed在每行添单引号,然后用paste合,或者用xargs来处理。不过需要确保每行都被正确包裹,逗号分隔。还要注意特殊字符的情况,比如如果内容中有单引号,可能需要转义,但用户的问题中没有提到这种情况,可能不需要处理。 所以最终给出两种方法:一种是使用sed和paste组合,另一种是使用xargs。同时要引用相关的引用内容,比如xargs处理换行的部分,以及sed处理换行符的限制。</think>要将多行文件合为单行并用单引号包裹每项内容,可以通过以下两种方法实现: --- ### 方法1:使用`sed`和`paste`命令组合 ```bash sed "s/^/'/;s/$/'/" input.txt | paste -sd, - ``` - **步骤解释**: 1. `sed "s/^/'/;s/$/'/"`:在每行开头添单引号`'`(`s/^/'/`),末尾也添单引号`'`(`s/$/'/`)。 2. `paste -sd, -`:将所有行合一行并用逗号分隔(`-d,`表示分隔符为逗号)[^1]。 --- ### 方法2:使用`xargs`和`tr`命令组合 ```bash cat input.txt | xargs -I{} echo "'{}'" | tr '\n' ',' | sed 's/,$/\n/' ``` - **步骤解释**: 1. `xargs -I{} echo "'{}'"`:逐行读取内容并用单引号包裹(`-I{}`表示替换字符串为`{}`)[^1]。 2. `tr '\n' ','`:将换行符替换为逗号。 3. `sed 's/,$/\n/'`:删除末尾多余的逗号[^3]。 --- ### 示例效果 输入文件`input.txt`: ``` apple banana cherry ``` 输出结果: ``` 'apple','banana','cherry' ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值