小编jul*_*mme的帖子

SED:同一行上有多个模式,如何匹配/解析第一个模式

我有一个文件,其中包含电话号码数据,还有一些无用的东西.我正在尝试解析数字,当只有1个电话号码/线时,这不是问题.但是当我有多个数字时,sed匹配最后一个(即使它说它应该只匹配匹配第一个模式?),我不能得到其他数字..

我的data.txt:

bla bla bla NUM:09011111111 bla bla bla bla NUM:08022222222 bla bla bla
Run Code Online (Sandbox Code Playgroud)

当我解析数据时,我的想法是首先删除第一个电话号码前面的所有"初始""bla bla bla"(所以我搜索第一次出现'NUM:'),然后我删除所有的东西电话号码后,并获取号码.之后我想从剩余的字符串中解析下一个匹配项.

所以现在当我尝试sed它时,我总是得到最后一个数字:

>sed 's/.*NUM://' data.txt
08022222222 bla bla bla
> 
Run Code Online (Sandbox Code Playgroud)

主要是我想了解我对SED的理解有什么问题.当然,欢迎更有效的建议!不是我的sed命令说,用''(空)替换'N​​UM:'之前的所有内容?为什么它总是与最后一次匹配?

谢谢!

regex parsing sed last-occurrence

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

内核驱动程序从用户空间读取正常,但写回始终为0

所以我正在通过内核驱动程序编程工作,目前我正在尝试在应用程序和内核驱动程序之间构建一个简单的数据传输.

我使用简单的字符设备作为这两者之间的链接,我已成功将数据传输到驱动程序,但我无法将有意义的数据返回给用户空间.

内核驱动程序如下所示:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h> /* printk() */
#include <linux/errno.h> /* error codes */
#include <linux/types.h> /* size_t */
#include <linux/proc_fs.h>
#include <asm/uaccess.h> /* copy_from/to_user */

MODULE_LICENSE("GPL");

//Declarations
int memory_open(struct inode *inode, struct file *filp);
int memory_release(struct inode *inode, struct file *filp);
ssize_t memory_read(struct file *filp, char *buf, size_t count, loff_t *f_pos);
ssize_t memory_write(struct file *filp, char *buf, size_t count, loff_t *f_pos);
void memory_exit(void);
int memory_init(void);

/* Structure that declares the usual file access functions */ …
Run Code Online (Sandbox Code Playgroud)

linux serial-communication kernel-module linux-device-driver

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

从FIQ中断处理程序访问内核驱动程序数据失败

在ARM FIQ中断上,我们有一些寄存器仅保留用于FIQ,这些是"保存状态"的便捷方式,例如FIQ调用之间的数据传输.

目前我正在GPIO从FIQ 触发一些引脚,它正在按预期工作.在设置FIQ处理程序时,我将指针传递给使用ioremap映射的数据寄存器.工作代码如下所示:

//Driver initialization:
static char* dout0;
static char* din0;
...
static int driver_probe(struct platform_device *pdev) 
{
struct pt_regs regs;
...
dout0 = ioremap(HW_PINCTRL_DOUT0, 0xffff);
din0  = ioremap(HW_PINCTRL_DIN0, 0xffff);
...
regs.ARM_r8 = (long) dout0;
regs.ARM_r9 = (long) din0;
set_fiq_regs(&regs);
...

//In the FIQ handler:
LDR r12, [r8]
ORR r12, r12, #0x20 /* set pin 5 high in dout0 register */
STR r12, [r8]
Run Code Online (Sandbox Code Playgroud)

上面的代码按预期执行,在pin 5执行FIQ处理程序后设置为高.

对于更复杂的操作,我想准备一个结构,它将保存数据指针和其他处理相关的数据,包括更多映射到不同的寄存器 - 并将其传递给FIQ处理程序.但是在将上述代码迁移到此时已经出现了问题.

我修改了上面的代码看起来像这样

//In Driver:
struct fiq_processing { …
Run Code Online (Sandbox Code Playgroud)

arm interrupt linux-device-driver linux-kernel embedded-linux

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

带有 PyGTK 崩溃的多线程 Gstreamer (xcb_xlib_threads_sequence_lost)

据我所知,一个是不应该更新从其他线程的UI gtk,否则将面临后果,但我不知道在使用我如何能够避免这种情况gstreamer

我的应用程序在视频流初始化期间不时崩溃,并出现以下抱怨:

[xcb] Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
python: ../../src/xcb_io.c:274: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed.
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我gtk.thread_init()在 GUI 类的开头添加了call:

import pygtk, gtk, gobject
gtk.gdk.threads_init()
Run Code Online (Sandbox Code Playgroud)

(我也试过gobject.threads_init(),但这似乎没有什么不同)。在一个单独的类中,它在一个单独的线程中运行,我启动一个 gstreamer 流到 a tcpserversink(这个 gstreamer 线程已经是第三个线程,如果有人在计数的话)。然后另一个线程在将数据推送到xvimagesink最后之前接收此数据。

xvimagesink需要视,我相信这GStreamer的回调函数就是有时GTK都疯了,当我为它分配:

def on_sync_message(self, bus, message):
...
if message_name == "prepare-xwindow-id":

  # Assign the viewport
  imagesink = message.src
  imagesink.set_property("force-aspect-ratio", …
Run Code Online (Sandbox Code Playgroud)

python gtk multithreading pygtk gstreamer

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

colorbox中的jquery-ui对话框导致最大调用堆栈大小超出错误

我正在使用jquery-ui它,它的dialog功能是在我的网络应用程序中显示模态对话框.它工作正常.

在一个用例中,我colorbox在屏幕上有一个弹出窗口,一旦用户完成输入,我需要显示一个确认对话框.

此外,由于我尝试的所有主要浏览器上的错误处理,一切实际上都有效,但我担心javascript引擎和浏览器的某些组合可能会导致什么问题.

我得到的错误是调用堆栈大小溢出(Chrome将其显示为Uncaught RangeError: Maximum call stack size exceeded.).

模态对话框的代码是:

function modalDialog(dialogText, dialogTitle, okFunc, okLabel, cancelFunc, cancelLabel) {

var dialogButtons = {};

dialogButtons[okLabel] = function() {
  if (typeof(okFunc) == 'function') {
    setTimeout(okFunc, 50);
  }
  $(this).dialog('destroy');
};
dialogButtons[cancelLabel] = function() {
  if (typeof(cancelFunc) == 'function') {
    setTimeout(cancelFunc, 50);
  }
  $(this).dialog('destroy');
};

$('<div style="padding: 10px; max-width: 500px; word-wrap: break-word;">' + dialogText + '</div>').dialog({
  draggable: true,
  modal: true,
  resizable: false,
  width: 'auto',
  title: dialogTitle …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-ui colorbox

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

使用 RT 补丁的 Linux 内核的中断性能 - 应该更好吗?

我在使用 CONFIG_PREEMPT_RT 补丁运行 Linux 内核 (3.8.13) 的 Freescales imx.233 上遇到了一些不一致的 IRQ/ISR 性能。我有点惊讶为什么这个处理器(ARM9,454mhz)甚至无法跟上 74kHz IRQ 请求..?

在我的内核配置中,我设置了以下标志:

CONFIG_TINY_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_PREEMPT=y
CONFIG_PREEMPT_RT_BASE=y
CONFIG_HAVE_PREEMPT_LAZY=y
CONFIG_PREEMPT_LAZY=y
CONFIG_PREEMPT_RT_FULL=y
CONFIG_PREEMPT_COUNT=y
CONFIG_DEBUG_PREEMPT=y
Run Code Online (Sandbox Code Playgroud)

系统上基本上没有任何运行(由 bu​​ildroot 创建),我将 PWM 设置为生成 74kHz 的脉冲,用作中断。然后在 ISR 中,我只是触发另一个 GPIO 输出引脚,并检查输出。我发现有时我会错过一个中断 - 你可以在这里看到错过的中断:

错过中断

而且输出引脚的触发似乎有点不一致,输出引脚通常在“5%窗口”内触发,这可能仍然可以接受。但我担心,当我开始实现数据传输逻辑时,不仅仅是触发引脚,我可能会遇到更多问题......

我的简单驱动程序代码如下所示:

#needed includes

uint16_t INPUT_IRQ = 39;
uint16_t OUTPUT_GPIO = 38;

struct test_device *device;

//Prototypes
void irqtest_exit(void);
int irqtest_init(void);
void free_device(void);

//Default functions
module_init(irqtest_init);
module_exit(irqtest_exit);

//triggering flag
uint16_t pulse = 0x1;

irqreturn_t irq_handle_function(int irq, void *device_id)
{
pulse = !pulse;
gpio_set_value(OUTPUT_GPIO, …
Run Code Online (Sandbox Code Playgroud)

arm interrupt linux-device-driver linux-kernel

4
推荐指数
1
解决办法
4549
查看次数

SQL日期转换结果为"无效数字格式模型参数".

我必须selectOracle 11g数据库中获取一些数据,但我似乎无法弄清楚为什么后续select查询失败:

SELECT
  INFO_ID,
  INFO_DETAIL, 
  IMPORTANT_FLG, 
  DELETE_FLG, 
  CREATE_TIME, 
  DISPLAY_ORDER
  FROM  TABLE_NAME
  WHERE TO_DATE(TO_CHAR(CREATE_TIME, 'YYYY/MM/DD'), 'YYYY/MM/DD')
  BETWEEN TO_DATE(TO_CHAR(:fromDate, 'YYYY/MM/DD'), 'YYYY/MM/DD') AND TO_DATE(TO_CHAR(:toDate, 'YYYY/MM/DD'), 'YYYY/MM/DD')
  ORDER BY IMPORTANT_FLG DESC NULLS LAST , DISPLAY_ORDER ASC NULLS LAST, CREATE_TIME DESC, INFO_ID ASC
Run Code Online (Sandbox Code Playgroud)

查询失败,并显示以下错误消息:

ORA-01481: invalid number format model
01481. 00000 -  "invalid number format model"
*Cause:    The user is attempting to either convert a number to a string
       via TO_CHAR or a string to a number via TO_NUMBER …
Run Code Online (Sandbox Code Playgroud)

sql oracle date-arithmetic oracle11g date-formatting

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

Buildroot - 构建了一个文件系统,如何登录?引导挂起

有人可以帮助我理解我需要如何配置buildroot,以便我能够成功启动自己的文件系统并登录到它?

我有一个(貌似)工作内核,现在我创建了自己的文件系统(除了将控制台设置为ttyAMA0之外,没有真正更改构建根目录中的任何设置),但启动过程似乎挂起而没有任何问题:

....
[    3.130000] VFS: Mounted root (ext3 filesystem) on device 179:2.
[    3.140000] Freeing init memory: 144K
Starting logging: OK
Starting network...
ip: RTNETLINK answers: Operation not permitted
ip: SIOCSIFFLAGS: Permission denied
Run Code Online (Sandbox Code Playgroud)

这里可以看到整个启动日志:http://paste.ubuntu.com/1364407/

我知道/ etc/inittab控制启动过程,内容如下所示:

# Startup the system
null::sysinit:/bin/mount -t proc proc /proc
null::sysinit:/bin/mount -o remount,rw / # REMOUNT_ROOTFS_RW
null::sysinit:/bin/mkdir -p /dev/pts
null::sysinit:/bin/mkdir -p /dev/shm
null::sysinit:/bin/mount -a
null::sysinit:/bin/hostname -F /etc/hostname
# now run any rc scripts
::sysinit:/etc/init.d/rcS

# Put a getty on the sttyAMA0::respawn:/sbin/getty …
Run Code Online (Sandbox Code Playgroud)

linux embedded boot embedded-linux buildroot

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