标签: text-processing

从脚本输出中删除控制字符(包括控制台代码/颜色)

我可以使用“脚本”命令在命令行记录交互式会话。但是,这包括所有控制字符颜色代码。我可以使用“col -b”删除控制字符(如退格键),但找不到删除颜色代码的简单方法。

请注意,我想以正常方式使用命令行,所以不想在那里禁用颜色 - 我只想从脚本输出中删除它们。此外,我知道可以尝试并尝试找到一个正则表达式来解决问题,但我希望有一个更简单(更可靠 - 如果我在开发正则表达式时不知道代码怎么办?)解决方案。

要显示问题:

spl62 tmp:脚本
脚本启动,文件是打字稿
spl62 lepl: ls
add-licence.sed build-example.sh commit-test push-docs.sh
add-licence.sh build.sh delete-licence.sed setup.py
asn build-test.sh delete-licence.sh src
build-doc.sh 清理 doc-src test.ini
spl62 lepl:退出
脚本完成,文件是打字稿
spl62 tmp: cat -v 打字稿
脚本开始于 2011 年 6 月 9 日星期四上午 09:47:27 CLT
spl62 lepl: ls^M
^[[0m^[[00madd-licence.sed^[[0m ^[[00;32mbuild-example.sh^[[0m ^[[00mcommit-test^[[0m ^[[00;32mpush-docs.sh] ^[[0米^米
^[[00;32madd-licence.sh^[[0m ^[[00;32mbuild.sh^[[0m ^[[00mdelete-licence.sed^[[0m ^[[00msetup.py^[[0m^M]
^[[01;34masn^[[0m ^[[00;32mbuild-test.sh^[[0m ^[[00;32mdelete-licence.sh^[[0m ^[[01;34msrc^[[0m^M]
^[[00;32mbuild-doc.sh^[[0m ^[[00;32mclean^[[0m ^[[01;34mdoc-src^[[0m ^[[00mtest.ini^[[0m^M]
spl62 lepl: 退出^M

脚本完成于 2011 年 6 月 9 日星期四上午 09:47:29 …

colors terminal text-processing escape-characters typescript

80
推荐指数
6
解决办法
6万
查看次数

如何让 iconv 用转换后的输出替换输入文件?

我有一个 bash 脚本,它枚举目录中的每个 *.php 文件并应用于iconv它。这将在 STDOUT 中获得输出。

由于添加-o参数(根据我的经验)实际上可能在转换发生之前写入一个空白文件,我如何调整我的脚本以进行转换,然后覆盖输入文件?

for file in *.php
do
    iconv -f cp1251 -t utf8 "$file"
done
Run Code Online (Sandbox Code Playgroud)

shell io-redirection text-processing

79
推荐指数
2
解决办法
6万
查看次数

排序但保持标题行在顶部

我从一个程序中获取输出,该程序首先生成一行,即一堆列标题,然后是一堆数据行。我想剪切此输出的各个列并查看它根据各个列排序。在没有标题的情况下,通过-k选择与列sort一起cutawk查看列的子集,可以轻松完成剪切和排序。但是,这种排序方法将列标题与输出的其余行混合在一起。有没有一种简单的方法可以将标题保持在顶部?

text-processing sort table

78
推荐指数
5
解决办法
6万
查看次数

如何在 Linux 中使用 shell 脚本解析 JSON?

我有一个 JSON 输出,我需要在 Linux 中从中提取一些参数。

这是 JSON 输出:

{
        "OwnerId": "121456789127",
        "ReservationId": "r-48465168",
        "Groups": [],
        "Instances": [
            {
                "Monitoring": {
                    "State": "disabled"
                },
                "PublicDnsName": null,
                "RootDeviceType": "ebs",
                "State": {
                    "Code": 16,
                    "Name": "running"
                },
                "EbsOptimized": false,
                "LaunchTime": "2014-03-19T09:16:56.000Z",
                "PrivateIpAddress": "10.250.171.248",
                "ProductCodes": [
                    {
                        "ProductCodeId": "aacglxeowvn5hy8sznltowyqe",
                        "ProductCodeType": "marketplace"
                    }
                ],
                "VpcId": "vpc-86bab0e4",
                "StateTransitionReason": null,
                "InstanceId": "i-1234576",
                "ImageId": "ami-b7f6c5de",
                "PrivateDnsName": "ip-10-120-134-248.ec2.internal",
                "KeyName": "Test_Virginia",
                "SecurityGroups": [
                    {
                        "GroupName": "Test",
                        "GroupId": "sg-12345b"
                    }
                ],
                "ClientToken": "VYeFw1395220615808",
                "SubnetId": "subnet-12345314",
                "InstanceType": "t1.micro",
                "NetworkInterfaces": [
                    {
                        "Status": …
Run Code Online (Sandbox Code Playgroud)

sed awk text-processing json

78
推荐指数
4
解决办法
40万
查看次数

如何在不修改文件的情况下测试文件是使用 CRLF 还是 LF?

我需要定期运行一个命令,以确保某些文本文件保持在 Linux 模式下。不幸的是dos2unix总是修改文件,这会弄乱文件和文件夹的时间戳并导致不必要的写入。

我编写的脚本是用 Bash 编写的,所以我更喜欢基于 Bash 的答案。

bash text-processing newlines

77
推荐指数
9
解决办法
14万
查看次数

如何从文件的最后一行删除换行符以便向该行添加文本?

假设我有一个名为file

$ cat file
Hello
Welcome to
Unix
Run Code Online (Sandbox Code Playgroud)

我想and Linux在文件最后一行的末尾添加。如果我这样做echo " and Linux" >> file将被添加到一个新行。但我想要最后一行Unix and Linux

所以,为了解决这个问题,我想删除文件末尾的换行符。因此,如何删除文件末尾的换行符以便向该行添加文本?

shell-script text-processing newlines

77
推荐指数
4
解决办法
12万
查看次数

用它们的实际值替换文件中的环境变量?

有没有一种简单的方法来替换/评估文件中的环境变量?假设我有一个config.xml包含以下内容的文件:

<property>
    <name>instanceId</name>
    <value>$INSTANCE_ID</value>
</property>
<property>
    <name>rootPath</name>
    <value>/services/$SERVICE_NAME</value>
</property>
Run Code Online (Sandbox Code Playgroud)

...等等。我想$INSTANCE_IDINSTANCE_ID环境变量的值替换文件$SERVICE_NAME中的SERVICE_NAMEenv var的值。我不会先验地知道需要哪些环境变量(或者,如果有人向配置文件添加了新的环境变量,我不想更新脚本)。谢谢!

scripting shell-script text-processing environment-variables

77
推荐指数
3
解决办法
10万
查看次数

从文件中删除最后一行

sed 用来快速删除具有特定位置的行

sed '1d'
sed '5d'
Run Code Online (Sandbox Code Playgroud)

但是,如果我想删除文件的最后一行并且我不知道行数(我知道我可以使用wc和其他一些技巧来获得它)怎么办。

目前,使用一种解决方法 withheadtail结合 withwc来做到这一点。这里有什么快速曲折吗?

sed text-processing

74
推荐指数
5
解决办法
17万
查看次数

如何将文本行截断为最多 N 个字符?

给定一个文本文件或命令的输出,我如何截断它,以便每行长于N字符(通常N=80在终端中)都缩短到N最大字符数?

text-processing cut

73
推荐指数
1
解决办法
6万
查看次数

如何在匹配后打印到文件末尾的所有行?

输入文件 1 是:

dog 123 4335
cat 13123 23424 
deer 2131 213132
bear 2313 21313
Run Code Online (Sandbox Code Playgroud)

我给匹配的模式来自 in other file(比如dog 123 4335来自 file2)。

我匹配行的模式,dog 123 4335并且在打印没有匹配行的所有行后,我的输出是:

cat 13123 23424
deer 2131 213132
bear 2313 21313
Run Code Online (Sandbox Code Playgroud)

如果只使用无行地址只使用模式,例如1s 如何匹配和打印行?

grep sed text-processing

71
推荐指数
10
解决办法
13万
查看次数