相关疑难解决方法(0)

在OS X上使用sed进行就地编辑

我想在OS X上使用sed编辑文件.我正在使用以下命令:

sed 's/oldword/newword/' file.txt
Run Code Online (Sandbox Code Playgroud)

输出发送到终端. file.txt未被修改.使用以下命令将更改保存到file2.txt:

sed 's/oldword/newword/' file1.txt > file2.txt
Run Code Online (Sandbox Code Playgroud)

但是我不想要另一个文件.我只想编辑file1.txt.我怎样才能做到这一点?

我试过-i标志.这会导致以下错误:

sed: 1: "file1.txt": invalid command code f
Run Code Online (Sandbox Code Playgroud)

macos file-io sed in-place

130
推荐指数
5
解决办法
8万
查看次数

如何使用awk命令将查找输出写入同一文件

awk '/^nameserver/ && !modif { printf("nameserver 127.0.0.1\n"); modif=1 } {print}' testfile.txt
Run Code Online (Sandbox Code Playgroud)

它正在显示输出,但我想将输出写入同一文件.在我的例子中testfile.txt.

bash shell awk

27
推荐指数
5
解决办法
3万
查看次数

使用grep进行就地处理

我有一个调用grep来处理文本文件的脚本.目前我正在做这样的事情.

$ grep 'SomeRegEx' myfile.txt > myfile.txt.temp
$ mv myfile.txt.temp myfile.txt
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何方法可以进行就地处理,例如将结果存储到相同的原始文件而不必创建临时文件,然后在处理完成时将原始文件替换为临时文件.

当然,我欢迎评论为什么应该或不应该这样做,但我主要关心的是它是否可以完成.在这个例子中我正在使用grep,但我对Unix工具感兴趣.谢谢!

unix grep in-place

25
推荐指数
2
解决办法
1万
查看次数

改进 PySpark DataFrame.show 输出以适合 Jupyter notebook

在 Jupyter notebook 中使用 PySpark,DataFrame.show与 Pandas DataFrames 的显示方式相比,Spark 的输出技术含量较低。我想“嗯,它可以完成工作”,直到我得到这个:

在此处输入图片说明

输出未调整为笔记本的宽度,因此线条以丑陋的方式环绕。有没有办法自定义这个?更好的是,有没有办法获得 Pandas 风格的输出(pandas.DataFrame不明显转换为)?

python pandas apache-spark pyspark jupyter

18
推荐指数
3
解决办法
1万
查看次数

pyspark在ipython笔记本中将数据帧显示为具有水平滚动的表

一个pyspark.sql.DataFrame混乱的显示DataFrame.show()- 行换行而不是滚动.

在此输入图像描述

但显示 pandas.DataFrame.head 在此输入图像描述

我试过这些选择

import IPython
IPython.auto_scroll_threshold = 9999

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
from IPython.display import display
Run Code Online (Sandbox Code Playgroud)

但没有运气.虽然在Atom编辑器中使用jupyter插件时滚动工作:

在此输入图像描述

ipython pandas pyspark pyspark-sql jupyter-notebook

14
推荐指数
4
解决办法
6194
查看次数

使用非 GNU awk 保存修改

我遇到了一个问题(关于 SO 本身),其中 OP 必须对 Input_file(s) 本身进行编辑和保存操作。

我知道对于单个 Input_file 我们可以执行以下操作:

awk '{print "test here..new line for saving.."}' Input_file > temp && mv temp Input_file
Run Code Online (Sandbox Code Playgroud)

现在假设我们需要以相同类型的文件格式进行更改(假设这里是 .txt)。

我对这个问题的尝试/想法:它的方法是通过 .txt 文件的 for 循环,调用 singleawk是一个痛苦且不推荐的过程,因为它会浪费不必要的 cpu 周期,并且对于更多数量的文件,它会更多减缓。

那么在这里可以做什么来使用awk不支持就地选项的非 GNU 对多个文件执行就地编辑。我也经历过这个线程使用 awk 保存修改,但对于非 GNU awk 的恶习和在awk其内部更改多个文件没有什么意义,因为非 GNU awk 将无法inplace选择它。

注意:为什么我要添加bash标签,因为在我的回答部分中,我使用 bash 命令将临时文件重命名为它们的实际 Input_file 名称,因此添加了它。



编辑:根据 Ed sir 的评论,在此处添加示例示例,尽管此线程代码的用途也可用于通用就地编辑。

示例 Input_file(s):

cat test1.txt
onetwo three
tets testtest

cat test2.txt
onetwo …
Run Code Online (Sandbox Code Playgroud)

linux bash shell awk inplace-editing

10
推荐指数
2
解决办法
1192
查看次数

分开对面的awk

与此相反的split()awk什么?想象一下,我有数组包含字符/整数.

我尝试过的:

color = "#FFFF00";
printf("color original: %s\n", color);
split(color, chars, "");
joined = "";
for (i=1; i <= length(chars); i++) {
    joined = joined + chars[i];
}
printf("color joined: %s\n", joined);
Run Code Online (Sandbox Code Playgroud)

但输出是:

color original: #FFFF00
color joined: 0
Run Code Online (Sandbox Code Playgroud)

这当然是不正确的.

更新: 很酷,最后得到以下代码(灵感来自答案中的连接功能):

color = "#FFFF00";
printf("color original: %s\n", color);
split(color, chars, "");
joined = "";
for (i=1; i <= length(chars); i++) {
    joined = joined "" chars[i];
}
printf("color joined: %s\n", joined);
Run Code Online (Sandbox Code Playgroud)

诀窍是+在加入东西时不使用标志

awk

5
推荐指数
3
解决办法
1万
查看次数

在 awk 语句中使用 sed

我想在仅以关键字开头的文件 roster.txt 的行上执行一系列 sed 命令。例如:

Employee : Kiara 20 hours@8.25
Employee : Connor 25 hours@8.00
Employee : Dylan 30 hours@9.00
Run Code Online (Sandbox Code Playgroud)

变成:

Employee : Kiara_20_hoursat8dot25
Employee : Connor_25_hoursat8dot00
Employee : Dylan_30_hoursat9dot00
Run Code Online (Sandbox Code Playgroud)

我知道进行更改的 sed 命令我只是想要一种在以“employee”开头的行上执行它们的方法。也许

awk '$1 == "Employee" {sed -i -e 's/\./dot/g' roster.txt}' roster.txt
Run Code Online (Sandbox Code Playgroud)

awk sed

5
推荐指数
1
解决办法
2万
查看次数

删除重复行并覆盖同一命令中的文件

我正在尝试从文件中删除重复的行并更新文件.出于某种原因,我必须将其写入新文件并替换它.这是唯一的方法吗?

awk '!seen[$0]++' .gitignore > .gitignore

awk '!seen[$0]++' .gitignore > .gitignore_new && mv .gitignore_new .gitignore
Run Code Online (Sandbox Code Playgroud)

bash awk

3
推荐指数
2
解决办法
1111
查看次数

如何删除远程计算机上的authorized_keys文件中的重复行

有时我们的 linux 机器上有一个巨大的文件 /root/.ssh/authorized_keys,这是因为文件中有很多重复的行,如下所示

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6yaJuzX2QldXj9jI/IYbJQuYDTUf232IbkefUDG4sZxkkScbiqC4skJs9bC58iovYxMVLB7YijIHDri7ONfKzixooSfpf8x18JdmSTkEl7WVTPm3TI/fPVP7DDOoBbqpTeZzS6cFVRMceve3ecFp/Z
D02RfLy6FHu3Y9o55g4Hlm+IgRq+QflsSoY3khZhaxofyzYIchg9NI1RzEZJQEBIMlQZMd+bRiBoAtzqI2BtKd5YmnBmxGHhnZLswSeo7hz+2cAPe+Ng37V91cSuygQJyKf20f1DmhSKHvHEDU3EXDPbjO8H0LNz6OEhsjwUj+G5dcJA04wY0Y1+qCfRz
kR root@server1.com
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6yaJuzX2QldXj9jI/IYbJQuYDTUf232IbkefUDG4sZxkkScbiqC4skJs9bC58iovYxMVLB7YijIHDri7ONfKzixooSfpf8x18JdmSTkEl7WVTPm3TI/fPVP7DDOoBbqpTeZzS6cFVRMceve3ecFp/Z
D02RfLy6FHu3Y9o55g4Hlm+IgRq+QflsSoY3khZhaxofyzYIchg9NI1RzEZJQEBIMlQZMd+bRiBoAtzqI2BtKd5YmnBmxGHhnZLswSeo7hz+2cAPe+Ng37V91cSuygQJyKf20f1DmhSKHvHEDU3EXDPbjO8H0LNz6OEhsjwUj+G5dcJA04wY0Y1+qCfRz
kR root@server1.com
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6yaJuzX2QldXj9jI/IYbJQuYDTUf232IbkefUDG4sZxkkScbiqC4skJs9bC58iovYxMVLB7YijIHDri7ONfKzixooSfpf8x18JdmSTkEl7WVTPm3TI/fPVP7DDOoBbqpTeZzS6cFVRMceve3ecFp/Z
D02RfLy6FHu3Y9o55g4Hlm+IgRq+QflsSoY3khZhaxofyzYIchg9NI1RzEZJQEBIMlQZMd+bRiBoAtzqI2BtKd5YmnBmxGHhnZLswSeo7hz+2cAPe+Ng37V91cSuygQJyKf20f1DmhSKHvHEDU3EXDPbjO8H0LNz6OEhsjwUj+G5dcJA04wY0Y1+qCfRz
kR root@server1.com
Run Code Online (Sandbox Code Playgroud)

删除这些重复行以便只出现唯一行的最佳方法是什么?

我们需要删除远程计算机上 VIA ssh 的重复行

ssh bash

3
推荐指数
1
解决办法
684
查看次数