这个stackoverflow问题有一个用sed替换换行符的答案,使用sed':a; N; $!ba; s/\n// g'格式.
这适用,但不适用于\ r,\n等特殊字符.
我想要做的是用文字\n替换换行符.试着
sed ':a;N;$!ba;s/\n/\\n/g'
Run Code Online (Sandbox Code Playgroud)
和
sed ':a;N;$!ba;s/\n/\\\n/g'
Run Code Online (Sandbox Code Playgroud)
也
sed ":a;N;$!ba;s/\n/'\'n/g"
Run Code Online (Sandbox Code Playgroud)
但一切都无济于事.Sed继续用换行符替换换行符....
思考?
为了完整起见,运行的命令是:
PostContent =cat $TextTable | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g'
其中TextTable是一个变量,链接到包含以下格式的JSON输出的文本文件:
{"posts":[{"title":"mysupertest","slug":"bi-test","markdown":"##TEST
First things first !
To TEST this TEST TEST, click the download button below.
If you need more information about the TEST TEST, you can read the Table of Contents below.
<a href='/assets/TEST.pdf' style='border-radius:5px; padding: 4px 15px; background-color:#008CBA; color:white; text-decoration:none; float:right;' download> Download </a>
##TEST OF TEST
###TEST TEST …
Run Code Online (Sandbox Code Playgroud) 我是shell脚本的新手,我试图使用SED从每一行中删除新的行字符.这是我到目前为止所做的:
printf "{new\nto\nlinux}" | sed ':a;N;s/\n/ /g'
Run Code Online (Sandbox Code Playgroud)
仅删除Ist新行字符.我找到了这个命令:
printf "{new\nto\nlinux}" | sed ':a;N;$!ba;s/\n/ /g'
Run Code Online (Sandbox Code Playgroud)
但它给出了:"ba:未找到事件."
如果我做:
printf "{new\nto\nlinux}" | sed ':a;N;s/\n/ /g' | sed ':a;N;s/\n/ /g'
Run Code Online (Sandbox Code Playgroud)
然后它提供正确的输出,但我正在寻找更好的东西,因为我不知道当我运行脚本时我会得到多少新角色.传入流来自echo或printf或脚本中的某些变量.提前致谢
所有程序员都应该知道很多事情,但我对我们都应该知道的Unix/Linux命令特别感兴趣.为了完成我们可能在某些时候遇到的任务,例如重构,报告,网络更新等.
我很好奇的原因是因为我在学习学位期间曾在一家软件公司担任过软件测试员,我注意到所有开发人员(开发Windows软件的人)都有2台计算机.
左边是他们的Windows XP开发机器,右边是一个Linux机器.我认为这是Ubuntu.无论如何,他们告诉我他们使用它是因为它提供了Windows在开发过程中无法完成的强大的unix操作.
这让我很奇怪,作为一名软件工程师,您认为您可以在Unix/Linux操作系统上执行哪些最强大的脚本/命令/用途,每个程序员都应该知道这些脚本/命令/用途可以解决现实世界中可能没有的任务.必然与编写代码有关?
我们都知道什么是sed,awk和grep.我对一些已经解决了一个难题的实际Unix/Linux脚本片感兴趣,以便其他程序员可以从中受益.请提供您的故事和来源.
我相信有很多这样的例子,人们会保留在他们的' Scripts '文件夹中.
更新:人们似乎误解了这个问题.我不是要求各个unix命令的名称,而是要求解决问题的UNIX代码片段.
遍历目录树并打印出与正则表达式匹配的任何文件的路径:
find . -exec grep -l -e 'myregex' {} \; >> outfile.txt
Run Code Online (Sandbox Code Playgroud)
调用默认编辑器(Nano/ViM)
(适用于大多数Unix系统,包括Mac OS X)默认编辑器是您的" EDITOR "环境变量设置的任何内容.即:导出EDITOR =/usr/bin/pico,位于Mac OS X下的〜/ .profile.
Ctrl+x Ctrl+e
Run Code Online (Sandbox Code Playgroud)
列出所有正在运行的网络连接(包括它们所属的应用程序)
lsof -i -nP
Run Code Online (Sandbox Code Playgroud)
清除终端的搜索历史(我最喜欢的另一个)
history -c
Run Code Online (Sandbox Code Playgroud) 我正在研究一个bash脚本,它必须准备一封电子邮件发送给用户.
它汇总了一些数据,最终会产生多行内容.对于存储的示例$DATA
.
现在,经过一些stfw我找到了一些类似的东西,sed -ei "s/_data_/${DATA}/g" mail.tpl
并且还用多行替换变量.他们都没有工作.
现在问题是,如何sed
用多行文本替换某些内容?
(sed
也欢迎替代品!)
该git
命令
git log --format='%H' --follow -- foo.txt
Run Code Online (Sandbox Code Playgroud)
将为您提供一系列提交,foo.txt
在重命名后跟随它.
我想知道是否有一个git log
命令也会在每次提交旁边打印相应的历史文件名.
这将是这样的,我们可以解释'%F'
为文件名的(实际上不存在的)占位符.
git log --format='%H %F' --follow -- foo.txt
Run Code Online (Sandbox Code Playgroud)
我知道这可以用
git log --format='%H' --follow --numstat -- foo.txt
Run Code Online (Sandbox Code Playgroud)
但输出并不理想,因为它需要一些非平凡的解析; 每个提交都遍布多行,您仍然需要解析文件重命名语法("bar.txt => foo.txt"
)以找到您要查找的内容.
我正在尝试编写一个可以从文件中删除URL的sed表达式
例
http://samgovephotography.blogspot.com/ updated my blog just a little bit ago. Take a chance to check out my latest work. Hope all is well:)
Meet Former Child Star & Author Melissa Gilbert 6/15/09 at LA's B&N https://hollywoodmomblog.com/?p=2442 Thx to HMB Contributor @kdpartak :)
Run Code Online (Sandbox Code Playgroud)
但我不明白:
sed 's/[\w \W \s]*http[s]*:\/\/\([\w \W]\)\+[\w \W \s]*/ /g' posFile
Run Code Online (Sandbox Code Playgroud)
固定!!!!!
处理几乎所有情况,甚至是格式错误的URL
sed 's/[\w \W \s]*http[s]*[a-zA-Z0-9 : \. \/ ; % " \W]*/ /g' positiveTweets | grep "http" | more
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的 Java 库发布到 Maven Central。其中一部分涉及使用signing
gradle 插件对工件进行签名。我需要在不使用密钥环文件作为文档的情况下对其进行签名,因为我无法提供对密钥环文件的 CI 安全访问。
但是,当我这样做时,我的构建失败了:
FAILURE: Build failed with an exception.
* What went wrong:
Could not evaluate onlyIf predicate for task ':signArchives'.
> Could not read PGP secret key
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我认为这与我的GPG_SIGNING_KEY
. 我使用了响应中的完整私钥gpg --list-secret-keys --keyid-format LONG
。这不正确吗?
我的 build.gradle
apply plugin: 'java'
apply plugin: 'signing'
apply plugin: 'maven'
apply from: 'publish.gradle'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
testCompile 'junit:junit:4.11'
} …
Run Code Online (Sandbox Code Playgroud) 因为我是sed的新手,所以我很高兴看到sed不认为\ r \n字符是有效的行分隔符.
有没有人知道如何告诉sed在处理多行文本时,我希望将哪些字符用作行分隔符?
有没有办法用sed替换等长的其他东西(例如点,零等)的模式?像这样:
maci:/ san$ echo "She sells sea shells by the sea shore" | sed 's/\(sh[a-z]*\)/../gI'
.. sells sea .. by the sea ..
Run Code Online (Sandbox Code Playgroud)
("我"需要更新版本的sed来忽略大小写)
这很简单:以"sh"开头的单词被双点(..)替换但是如何使它成为这样的东西:... sells sea ...... by the sea .....
任何的想法?干杯!
在另一篇文章中我发现非常整洁
git diff --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'
Run Code Online (Sandbox Code Playgroud)
它可以很好git-diff
地将输出压缩到必要的同时保持清晰(特别是在添加--word-diff=plain
额外的[-
/ -]
和{+
/ +}
周围的删除/添加时).虽然这确实包括空格更改,但输出不会以任何明显的方式突出显示它们,例如,当更改一行python代码的缩进(这是一个严重的更改)将显示为具有较长缩进的行(在之前或之后) ),但没有任何突出显示.
如何空白改变正确地在突出显示,也许是一些Unicode字符,如更换空白·
,?
和?
,或一些更接近git diff --word-diff-regex=.
的{+ +}
等,但与更聪明的字分离?