我想在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) awk '/^nameserver/ && !modif { printf("nameserver 127.0.0.1\n"); modif=1 } {print}' testfile.txt
Run Code Online (Sandbox Code Playgroud)
它正在显示输出,但我想将输出写入同一文件.在我的例子中testfile.txt.
我有一个调用grep来处理文本文件的脚本.目前我正在做这样的事情.
$ grep 'SomeRegEx' myfile.txt > myfile.txt.temp
$ mv myfile.txt.temp myfile.txt
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何方法可以进行就地处理,例如将结果存储到相同的原始文件而不必创建临时文件,然后在处理完成时将原始文件替换为临时文件.
当然,我欢迎评论为什么应该或不应该这样做,但我主要关心的是它是否可以完成.在这个例子中我正在使用grep,但我对Unix工具感兴趣.谢谢!
在 Jupyter notebook 中使用 PySpark,DataFrame.show与 Pandas DataFrames 的显示方式相比,Spark 的输出技术含量较低。我想“嗯,它可以完成工作”,直到我得到这个:
输出未调整为笔记本的宽度,因此线条以丑陋的方式环绕。有没有办法自定义这个?更好的是,有没有办法获得 Pandas 风格的输出(pandas.DataFrame不明显转换为)?
一个pyspark.sql.DataFrame混乱的显示DataFrame.show()- 行换行而不是滚动.
我试过这些选择
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插件时滚动工作:
我遇到了一个问题(关于 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) 与此相反的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)
诀窍是+在加入东西时不使用标志
我想在仅以关键字开头的文件 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 '!seen[$0]++' .gitignore > .gitignore
awk '!seen[$0]++' .gitignore > .gitignore_new && mv .gitignore_new .gitignore
Run Code Online (Sandbox Code Playgroud) 有时我们的 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 的重复行