我可以使用“脚本”命令在命令行记录交互式会话。但是,这包括所有控制字符和颜色代码。我可以使用“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
我有一个 bash 脚本,它枚举目录中的每个 *.php 文件并应用于iconv它。这将在 STDOUT 中获得输出。
由于添加-o参数(根据我的经验)实际上可能在转换发生之前写入一个空白文件,我如何调整我的脚本以进行转换,然后覆盖输入文件?
for file in *.php
do
iconv -f cp1251 -t utf8 "$file"
done
Run Code Online (Sandbox Code Playgroud) 我从一个程序中获取输出,该程序首先生成一行,即一堆列标题,然后是一堆数据行。我想剪切此输出的各个列并查看它根据各个列排序。在没有标题的情况下,通过-k选择与列sort一起cut或awk查看列的子集,可以轻松完成剪切和排序。但是,这种排序方法将列标题与输出的其余行混合在一起。有没有一种简单的方法可以将标题保持在顶部?
我有一个 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) 我需要定期运行一个命令,以确保某些文本文件保持在 Linux 模式下。不幸的是dos2unix总是修改文件,这会弄乱文件和文件夹的时间戳并导致不必要的写入。
我编写的脚本是用 Bash 编写的,所以我更喜欢基于 Bash 的答案。
假设我有一个名为file:
$ cat file
Hello
Welcome to
Unix
Run Code Online (Sandbox Code Playgroud)
我想and Linux在文件最后一行的末尾添加。如果我这样做echo " and Linux" >> file将被添加到一个新行。但我想要最后一行Unix and Linux
所以,为了解决这个问题,我想删除文件末尾的换行符。因此,如何删除文件末尾的换行符以便向该行添加文本?
有没有一种简单的方法来替换/评估文件中的环境变量?假设我有一个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_ID用INSTANCE_ID环境变量的值替换文件$SERVICE_NAME中的SERVICE_NAMEenv var的值。我不会先验地知道需要哪些环境变量(或者,如果有人向配置文件添加了新的环境变量,我不想更新脚本)。谢谢!
scripting shell-script text-processing environment-variables
我sed 用来快速删除具有特定位置的行
sed '1d'
sed '5d'
Run Code Online (Sandbox Code Playgroud)
但是,如果我想删除文件的最后一行并且我不知道行数(我知道我可以使用wc和其他一些技巧来获得它)怎么办。
目前,使用一种解决方法 withhead并tail结合 withwc来做到这一点。这里有什么快速曲折吗?
给定一个文本文件或命令的输出,我如何截断它,以便每行长于N字符(通常N=80在终端中)都缩短到N最大字符数?
输入文件 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
如何匹配和打印行?